Caricare uno script solo per un custom post type in amministrazione

28 nov 2011, 05:56:48
Visualizzazioni: 38.3K
Voti: 24

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?

1
Commenti

Nota: Gli enqueue non dovrebbero essere inseriti su init.. (molte persone lo fanno, ma non è il posto giusto per un enqueue)..

t31os t31os
29 nov 2011 17:40:59
Tutte le risposte alla domanda 3
1
37

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' );
}
28 nov 2011 06:25:29
Commenti

non più accurato. La risposta di @Smartik è ora l'approccio corretto.

Yaron Yaron
24 feb 2017 00:11:52
0
36

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.

24 ott 2016 14:57:45
0
// 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:

  1. Ho cambiato get_stylesheet_directory_uri() . '/admin.js' in plugins_url( '/js/admin.js', __FILE__), - questo era necessario perché ho sviluppato un plugin per un banner, che è la soluzione migliore invece di creare CPT dentro functions.php

  2. Ho aggiunto "true" per inviare il codice nell'area del footer invece che nell'head - migliora i tempi di caricamento

18 dic 2013 19:39:19