Încărcarea unui script doar pentru tipul de postare personalizat în admin
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?
Î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' );
}

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.

// 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:
Am schimbat
get_stylesheet_directory_uri() . '/admin.js'
înplugins_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 înfunctions.php
Am adăugat "
true
" pentru a trimite codul în zona de footer în loc de head - îmbunătățește timpul de încărcare
