Charger un script uniquement dans le type de publication personnalisé dans admin

14

J'ai créé un type de message personnalisé "portfolio" avec quelque chose comme ceci:

$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 );

Et j'ai d'autres champs personnalisés avec une action:

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

Bien que j’aie déjà eu ce travail, je ne peux pas le charger pour charger des scripts uniquement pour cette page. Pour le moment, je les ai juste avec le reste de wp_enqueue_script comme ceci:

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');

Mais rien de tout cela ne me charge. Comment puis-je charger ces scripts dans les pages d'administration? Mieux encore, comment puis-je les charger spécifiquement pour les pages d'édition du type d'article personnalisé du portfolio?

    
posée zac 28.11.2011 - 04:56

3 réponses

28

Essayez ce code pour ajouter des scripts aux pages d'édition de votre type d'article personnalisé de portefeuille.

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' );
}
    
réponse donnée Joshua Abenazer 28.11.2011 - 05:25
16

Je publierai une meilleure solution car la réponse acceptée est ancienne et n'utilise pas les crochets appropriés .

Tout d'abord: pour mettre en file d'attente les scripts et les styles dans la zone d'administration, vous devez utiliser admin_enqueue_scripts et rien d'autre.

Deuxièmement: Oubliez les vars globaux. Utilisez l'objet d'écran en cours pour effectuer différentes vérifications.

Voici un code de copier-coller prêt:

<?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');

Remarque: remplacez 'portfolio' par le slug de type de publication requis.

    
réponse donnée 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
}

J'ai apporté des modifications à ce code pour qu'il fonctionne pour moi:

  1. J'ai remplacé get_stylesheet_directory_uri() . '/admin.js' par plugins_url( '/js/admin.js', __FILE__), - cela était nécessaire car j'ai développé un plugin pour une bannière, solution préférable à la création d'un CPT dans functions.php

  2. J'ai ajouté " true " pour envoyer le code dans la zone de pied de page au lieu de la tête - améliore le temps de chargement

réponse donnée Anna 18.12.2013 - 18:39

Lire d'autres questions sur les étiquettes