web-dev-qa-db-fra.com

Charger un script juste pour le type de message personnalisé dans admin

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

$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 faire charger des scripts uniquement pour cette page. En ce moment, je les ai juste avec le reste du 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 portefeuille?

17
zac

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' );
}
29
Joshua Abenazer

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

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 actuel pour effectuer différentes vérifications.

Voici un code copier-coller prêt à l'emploi:

<?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.

18
Andrei Surdu
// 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é quelques modifications dans ce code pour fonctionner pour moi:

  1. J'ai changé get_stylesheet_directory_uri() . '/admin.js' en plugins_url( '/js/admin.js', __FILE__), - cela était nécessaire car j'ai développé un plugin pour une bannière, ce qui est la meilleure solution à la place de la création de 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

1
Anna