Caricare uno script solo per un custom post type in amministrazione
Ho creato un custom post type "portfolio" con qualcosa del genere:
$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 );
E ho alcuni altri campi personalizzati con un'azione:
add_action("admin_init", "admin_init");
function admin_init(){ // add_meta_box( $id, $titolo, $callback, $pagina, $contesto, $priorità );
add_meta_box("media", "Tipo Media", "media", "portfolio", "side", "high");
add_meta_box("map_meta", "Info Mappatura", "map_meta", "portfolio", "normal", "high");
}
Anche se una volta funzionava, non riesco a capire come far caricare gli script solo per questa pagina. Al momento li ho insieme agli altri wp_enqueue_script
in questo modo:
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');
Ma niente di questo si sta caricando. Come posso caricare questi script nelle pagine di amministrazione? Ancora meglio, come posso caricarli specificamente per le pagine di modifica del custom post type portfolio?
Prova questo codice per aggiungere script alle pagine di modifica del tuo custom post type portfolio.
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' );
}

Pubblicherò una soluzione migliore perché la risposta accettata è vecchia e non utilizza gli hook corretti.
Prima di tutto: Per caricare script e stili nell'area di amministrazione, dev'essere usato admin_enqueue_scripts
e nient'altro.
Secondo: Dimentica qualsiasi variabile globale. Usa l'oggetto schermo corrente per effettuare diversi controlli.
Ecco un codice pronto per il copia-incolla:
<?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 ){
// Registra, carica script e stili qui
}
}
}
add_action( 'admin_enqueue_scripts', 'wpse_cpt_enqueue');
Nota: Sostituisci 'portfolio'
con lo slug del post type necessario.

// Aggiungi JS personalizzato all'area di amministrazione
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" - AGGIUNGE JS AL FOOTER
}
Ho apportato alcune modifiche a questo codice per farlo funzionare per me:
Ho cambiato
get_stylesheet_directory_uri() . '/admin.js'
inplugins_url( '/js/admin.js', __FILE__),
- questo era necessario perché ho sviluppato un plugin per un banner, che è la soluzione migliore invece di creare CPT dentrofunctions.php
Ho aggiunto "
true
" per inviare il codice nell'area del footer invece che nell'head - migliora i tempi di caricamento
