Cargar un script solo para un tipo de entrada personalizada en el admin
He creado un tipo de entrada 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, $título, $callback, $página, $contexto, $prioridad );
add_meta_box("media", "Tipo de Media", "media", "portfolio", "side", "high");
add_meta_box("map_meta", "Información del Mapa", "map_meta", "portfolio", "normal", "high");
}
Aunque una vez lo tuve funcionando, no puedo encontrar la manera de cargar scripts solo para esta página. Ahora mismo los tengo junto con el resto de 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 entrada personalizada portfolio?
Prueba este código para agregar scripts a las páginas de edición de tu tipo de contenido personalizado de portafolio.
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' );
}

Publicaré una mejor solución porque la respuesta aceptada es antigua y no utiliza los hooks correctos.
Primero que nada: Para encolar scripts y estilos en el área de administración, se debe usar admin_enqueue_scripts
y nada más.
Segundo: Olvida cualquier variable global. Usa el objeto de pantalla actual para realizar diferentes verificaciones.
Aquí tienes un código listo para copiar y pegar:
<?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 ){
// Registrar, encolar scripts y estilos aquí
}
}
}
add_action( 'admin_enqueue_scripts', 'wpse_cpt_enqueue');
Nota: Reemplaza 'portfolio'
con el slug del tipo de contenido que necesites.

// Agregar JS personalizado al área de administración
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" - AGREGA JS AL FOOTER
}
Hice algunos cambios en este código para que funcione para mí:
Cambié
get_stylesheet_directory_uri() . '/admin.js'
porplugins_url( '/js/admin.js', __FILE__),
- esto era necesario porque he desarrollado un plugin para un banner, lo cual es una mejor solución que crear el CPT dentro defunctions.php
Agregué "
true
" para enviar el código al área del footer en lugar del head - mejora el tiempo de carga
