Cargue un script solo para el tipo de publicación personalizada en admin

18

He creado una "cartera" de tipo de publicación personalizada con algo como esto:

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

Y tengo algunos otros campos personalizados allí con una acción:

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

Aunque una vez tuve esto funcionando, no puedo entender que cargue scripts solo para esta página. En este momento solo los tengo con el resto de wp_enqueue_scriptesta manera:

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

Pero nada de esto me está cargando. ¿Cómo puedo cargar estos scripts en las páginas de administración? Mejor aún, ¿cómo puedo cargarlos específicamente para las páginas de edición del tipo de publicación personalizada de cartera?

zac
fuente
2
FYI: encola no debería ir en init .. (mucha gente lo hace, pero no es el lugar adecuado para una puesta en cola) ..
t31os

Respuestas:

32

Pruebe este código para agregar scripts a las páginas de edición del tipo de publicación personalizada de su cartera.

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' );
}
Joshua Abenazer
fuente
1
Ya no es preciso. La respuesta de @Smartik ahora es el enfoque correcto.
Yaron
25

Publicaré una solución mejor porque la respuesta aceptada es antigua y no utiliza los ganchos correctos .

En primer lugar: para poner en cola secuencias de comandos y estilos en el área de administración, debe usarse admin_enqueue_scripts y nada más.

Segundo: Olvídate de cualquier variable global. Use el objeto de pantalla actual para realizar diferentes comprobaciones.

Aquí hay un código listo para copiar y pegar:

<?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: Reemplace 'portfolio'con el tipo de mensaje necesario slug.

Andrei Surdu
fuente
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
}

Hice algunos cambios en este código para trabajar para mí:

  1. Cambié get_stylesheet_directory_uri() . '/admin.js'a plugins_url( '/js/admin.js', __FILE__),: esto era necesario porque he desarrollado un complemento para un banner, que es la mejor solución en lugar de crear CPT dentrofunctions.php

  2. Agregué " true" para enviar el código en el área del pie de página en lugar de la cabecera; mejora el tiempo de carga

Anna
fuente