Carica uno script solo per inserire un post personalizzato in admin


18

Ho creato un tipo di post personalizzato "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 lì dentro con un'azione:

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");
}

Anche se una volta ho avuto questo lavoro, non riesco a capire come farlo caricare gli script solo per questa pagina. In questo momento li ho solo con il resto in wp_enqueue_scriptquesto 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 nulla di tutto ciò si sta caricando per me. Come posso caricare questi script nelle pagine di amministrazione? Meglio ancora, come posso caricarli specificamente per le pagine di modifica del tipo di post personalizzato del portfolio?


2
A proposito: Enqueues non dovrebbe andare su init .. (molte persone lo fanno, ma non è il posto giusto per un accodamento) ..
t31os,

Risposte:


32

Prova questo codice per aggiungere script alle pagine di modifica del tipo di post personalizzato del tuo 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' );
}

1
non più preciso. La risposta @Smartik ora è l'approccio corretto.
Yaron,

25

Pubblicherò una soluzione migliore perché la risposta accettata è vecchia e non usa i ganci giusti .

Prima di tutto: per accodare script e stili nell'area di amministrazione, deve essere usato admin_enqueue_scriptse nient'altro.

Secondo: dimentica tutti i var globali. Utilizzare l'oggetto schermo corrente per eseguire diversi controlli.

Ecco un codice di copia incolla pronto:

<?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: sostituire 'portfolio'con la lumaca di tipo posta necessaria.


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
}

Ho apportato alcune modifiche a questo codice per 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 plug-in per un banner, che è la soluzione migliore invece di creare CPT all'internofunctions.php

  2. Ho aggiunto " true" per inviare il codice nell'area del piè di pagina anziché nella testa - migliora il tempo per il caricamento

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.