Muat skrip hanya untuk jenis posting khusus di admin

18

Saya telah membuat "portofolio" jenis pos kustom dengan sesuatu seperti ini:

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

Dan saya memiliki beberapa bidang khusus di sana dengan tindakan:

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

Meskipun saya pernah memiliki ini berfungsi, saya tidak tahu untuk mendapatkannya memuat skrip hanya untuk halaman ini. Saat ini saya hanya memiliki mereka dengan sisa wp_enqueue_scriptseperti ini:

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

Tapi tidak ada yang memuat untuk saya. Bagaimana saya bisa memuat skrip ini ke halaman admin? Lebih baik lagi bagaimana saya bisa memuatnya secara khusus untuk halaman edit dari jenis pos kustom portofolio?

zac
sumber
2
FYI: Enqueues tidak boleh berlanjut init .. (banyak orang melakukannya, tapi itu bukan tempat yang tepat untuk enqueue) ..
t31os

Jawaban:

32

Coba kode ini untuk menambahkan skrip ke halaman edit dari jenis pos kustom portofolio Anda.

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
sumber
1
tidak lagi akurat. @Smartik jawaban sekarang pendekatan yang benar.
Yaron
25

Saya akan memposting solusi yang lebih baik karena jawaban yang diterima sudah tua dan tidak menggunakan kait yang benar .

Pertama-tama: Untuk membuat skrip dan gaya enqueue di area admin, harus digunakan admin_enqueue_scriptsdan tidak ada yang lain.

Kedua: Lupakan vars global. Gunakan objek layar saat ini untuk melakukan pemeriksaan yang berbeda.

Berikut ini adalah kode tempel salinan yang siap pakai:

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

Catatan: Ganti 'portfolio'dengan siput tipe posting yang dibutuhkan.

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

Saya membuat beberapa perubahan pada kode ini agar berfungsi untuk saya:

  1. Saya mengubah get_stylesheet_directory_uri() . '/admin.js'ke plugins_url( '/js/admin.js', __FILE__),- ini diperlukan karena saya telah mengembangkan sebuah plugin untuk banner, yang merupakan solusi yang lebih baik bukan menciptakan CPT dalamfunctions.php

  2. Saya telah menambahkan " true" untuk mengirim kode di area footer alih-alih kepala - meningkatkan waktu untuk memuat

Anna
sumber