Încărcarea unui script doar pentru tipul de postare personalizat în admin

28 nov. 2011, 05:56:48
Vizualizări: 38.3K
Voturi: 24

Am creat un tip de postare personalizat "portfolio" cu ceva de genul acesta:

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

Și am câteva câmpuri personalizate acolo cu o acțiune:

add_action("admin_init", "admin_init");
function admin_init(){ // add_meta_box( $id, $titlu, $callback, $pagina, $context, $prioritate ); 
  add_meta_box("media", "Tip Media", "media", "portfolio", "side", "high");
  add_meta_box("map_meta", "Informații Hartă", "map_meta", "portfolio", "normal", "high");
}

Deși odată am reușit să fac asta să funcționeze, nu pot să îmi dau seama cum să încarc scripturile doar pentru această pagină. Momentan le am împreună cu restul scripturilor wp_enqueue_script astfel:

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

Dar niciunul dintre acestea nu se încarcă pentru mine. Cum pot încărca aceste scripturi în paginile de administrare? Mai bine spus, cum le pot încărca specific pentru paginile de editare ale tipului de postare personalizat portfolio?

1
Comentarii

FYI: Încărcările (enqueues) nu ar trebui să fie plasate pe init.. (mulți oameni fac asta, dar nu este locul potrivit pentru un enqueue)..

t31os t31os
29 nov. 2011 17:40:59
Toate răspunsurile la întrebare 3
1
37

Încearcă acest cod pentru a adăuga scripturi la paginile de editare ale tipului tău personalizat de postare pentru portofoliu.

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
Comentarii

nu mai este corect. Răspunsul lui @Smartik este acum abordarea corectă.

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

Voi posta o soluție mai bună deoarece răspunsul acceptat este vechi și nu utilizează cârlige adecvate.

În primul rând: Pentru a încărca scripturi și stiluri în zona de administrare, trebuie utilizat admin_enqueue_scripts și nimic altceva.

În al doilea rând: Uitați de orice variabile globale. Utilizați obiectul ecranului curent pentru a efectua diferite verificări.

Iată un cod gata de copiat și lipit:

<?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 ){

            // Înregistrează, încarcă scripturi și stiluri aici

        }
    }
}

add_action( 'admin_enqueue_scripts', 'wpse_cpt_enqueue');

Notă: Înlocuiți 'portfolio' cu slug-ul tipului de postare necesar.

24 oct. 2016 14:57:45
0
// Adaugă JS personalizat în zona de administrare

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" - ADAUGĂ JS ÎN FOOTER
}

Am făcut câteva modificări în acest cod pentru a funcționa pentru mine:

  1. Am schimbat get_stylesheet_directory_uri() . '/admin.js' în plugins_url( '/js/admin.js', __FILE__), - acest lucru a fost necesar pentru că am dezvoltat un plugin pentru banner, care este soluția mai bună decât crearea CPT în functions.php

  2. Am adăugat "true" pentru a trimite codul în zona de footer în loc de head - îmbunătățește timpul de încărcare

18 dec. 2013 19:39:19