Cargar un script solo para un tipo de entrada personalizada en el admin

28 nov 2011, 05:56:48
Vistas: 38.3K
Votos: 24

He creado un tipo de entrada personalizada "portfolio" 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, $título, $callback, $página, $contexto, $prioridad ); 
  add_meta_box("media", "Tipo de Media", "media", "portfolio", "side", "high");
  add_meta_box("map_meta", "Información del Mapa", "map_meta", "portfolio", "normal", "high");
}

Aunque una vez lo tuve funcionando, no puedo encontrar la manera de cargar scripts solo para esta página. Ahora mismo los tengo junto con el resto de wp_enqueue_script así:

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 se está cargando para mí. ¿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 entrada personalizada portfolio?

1
Comentarios

Para tu información: Los enqueues no deberían ir en init... (muchas personas lo hacen, pero no es el lugar correcto para un enqueue)...

t31os t31os
29 nov 2011 17:40:59
Todas las respuestas a la pregunta 3
1
37

Prueba este código para agregar scripts a las páginas de edición de tu tipo de contenido personalizado de portafolio.

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
Comentarios

ya no es preciso. La respuesta de @Smartik es ahora el enfoque correcto.

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

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

Primero que nada: Para encolar scripts y estilos en el área de administración, se debe usar admin_enqueue_scripts y nada más.

Segundo: Olvida cualquier variable global. Usa el objeto de pantalla actual para realizar diferentes verificaciones.

Aquí tienes 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 ){

            // Registrar, encolar scripts y estilos aquí

        }
    }
}

add_action( 'admin_enqueue_scripts', 'wpse_cpt_enqueue');

Nota: Reemplaza 'portfolio' con el slug del tipo de contenido que necesites.

24 oct 2016 14:57:45
0
// Agregar JS personalizado al área de administración

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" - AGREGA JS AL FOOTER
}

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

  1. Cambié get_stylesheet_directory_uri() . '/admin.js' por plugins_url( '/js/admin.js', __FILE__), - esto era necesario porque he desarrollado un plugin para un banner, lo cual es una mejor solución que crear el CPT dentro de functions.php

  2. Agregué "true" para enviar el código al área del footer en lugar del head - mejora el tiempo de carga

18 dic 2013 19:39:19