Cargar un script solo para el tipo de publicación personalizada en admin

14

He creado un tipo de publicación personalizada "portfolio" con algo como esto:

$args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true,
    'query_var' => true,
    //'menu_icon' => get_stylesheet_directory_uri() . '/article16.png',
    'rewrite' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'menu_position' => 4,
    'taxonomies' => array('post_tag','category'),
    'supports' => array('title','editor','comments','trackbacks','revisions','custom-fields','page-attributes','thumbnail', 'excerpt', 'tags')
  ); 

register_post_type( 'portfolio' , $args );

Y tengo algunos otros campos personalizados allí con una acción:

add_action("admin_init", "admin_init");
function admin_init(){ // add_meta_box( $id, $title, $callback, $page, $context, $priority ); 
  add_meta_box("media", "Media Type", "media", "portfolio", "side", "high");
  add_meta_box("map_meta", "Mapping Info", "map_meta", "portfolio", "normal", "high");
}

Aunque una vez tuve este trabajo, no puedo averiguar cómo cargar scripts solo para esta página. Ahora mismo los tengo con el resto del wp_enqueue_script así:

function my_init() {
    if (!is_admin()) {
                       ....
        }

 if (is_admin()) {
        wp_register_script('Gmaps', 'http://maps.google.com/maps/api/js?sensor=false', false, '3.0', false);
        wp_enqueue_script('Gmaps');


        wp_register_style('admin_js', get_bloginfo('template_directory') . '/admin.js');
        wp_enqueue_script('admin_js');

        wp_register_script('Zmaps', get_bloginfo('template_directory') .'/scripts/maps.js', array('Gmaps'), '1.0', true);
        wp_enqueue_script('Zmaps');
        }
           }
add_action('wp_enqueue_scripts', 'my_init');

Pero nada de esto se está cargando para mí. ¿Cómo puedo cargar estos scripts en las páginas de administración? Mejor aún, ¿cómo puedo cargarlos específicamente para las páginas de edición del tipo de publicación personalizada de la cartera?

    
pregunta zac 28.11.2011 - 04:56

3 respuestas

28

Pruebe este código para agregar scripts a las páginas de edición del tipo de publicación personalizada de su cartera.

add_action( 'admin_print_scripts-post-new.php', 'portfolio_admin_script', 11 );
add_action( 'admin_print_scripts-post.php', 'portfolio_admin_script', 11 );

function portfolio_admin_script() {
    global $post_type;
    if( 'portfolio' == $post_type )
    wp_enqueue_script( 'portfolio-admin-script', get_stylesheet_directory_uri() . '/admin.js' );
}
    
respondido por el Joshua Abenazer 28.11.2011 - 05:25
16

Publicaré una mejor solución porque la respuesta aceptada es antigua y no usa los ganchos adecuados .

Primero que todo: para poner en cola los scripts y los estilos en el área de administración, se debe usar admin_enqueue_scripts y nada más.

Segundo: Olvida cualquier vars global. Utilice el objeto de pantalla actual para realizar diferentes comprobaciones.

Aquí hay un código de pegado de copia listo:

<?php 
function wpse_cpt_enqueue( $hook_suffix ){
    $cpt = 'portfolio';

    if( in_array($hook_suffix, array('post.php', 'post-new.php') ) ){
        $screen = get_current_screen();

        if( is_object( $screen ) && $cpt == $screen->post_type ){

            // Register, enqueue scripts and styles here

        }
    }
}

add_action( 'admin_enqueue_scripts', 'wpse_cpt_enqueue');

Nota: Reemplace 'portfolio' con la barra de tipo de publicación necesaria.

    
respondido por el Andrei Surdu 24.10.2016 - 13:57
1
// Enter custom JS TO ADMIN AREA

add_action( 'admin_print_scripts-post-new.php', 'banner_admin_script', 11 );
add_action( 'admin_print_scripts-post.php', 'banner_admin_script', 11 );

function banner_admin_script() {
    global $post_type;
    if ( $post_type == 'banner' )
        wp_enqueue_script( 'portfolio-admin-script', plugins_url( '/js/admin.js', 
            __FILE__), '', '', true ); // "TRUE" - ADDS JS TO FOOTER
}

Hice algunos cambios en este código para que me funcionen:

  1. Cambié get_stylesheet_directory_uri() . '/admin.js' a plugins_url( '/js/admin.js', __FILE__), ; esto fue necesario porque he desarrollado un complemento para un banner, que es la mejor solución en lugar de crear CPT dentro de functions.php

  2. He agregado " true " para enviar el código en el área del pie de página en lugar de en la cabeza: mejora el tiempo de carga

respondido por el Anna 18.12.2013 - 18:39

Lea otras preguntas en las etiquetas