โหลดสคริปต์เฉพาะกับประเภทโพสต์ที่กำหนดเองในผู้ดูแลระบบ


18

ฉันได้สร้างผลงานโพสต์ที่กำหนดเอง "ผลงาน" กับสิ่งนี้:

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

และฉันมีฟิลด์ที่กำหนดเองอื่น ๆ ในนั้นพร้อมกับการกระทำ:

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

แม้ว่าฉันเคยทำงานนี้ฉันไม่สามารถคิดออกเพื่อโหลดสคริปต์เพียงสำหรับหน้านี้ ตอนนี้ฉันมีพวกเขากับส่วนที่เหลือของสิ่งwp_enqueue_scriptนี้:

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

แต่สิ่งนี้ไม่โหลดสำหรับฉัน ฉันจะโหลดสคริปต์เหล่านี้ลงในหน้าผู้ดูแลระบบได้อย่างไร ยังดีกว่าฉันจะโหลดเฉพาะสำหรับหน้าแก้ไขประเภทโพสต์ที่กำหนดเองของพอร์ตโฟลิโอได้อย่างไร


2
FYI: Enqueues ไม่ควรดำเนินการเพื่อเริ่มต้น .. (ผู้คนจำนวนมากทำมัน แต่มันไม่ใช่สถานที่ที่เหมาะสมสำหรับการเข้าคิว) ..
t31os

คำตอบ:


32

ลองใช้รหัสนี้เพื่อเพิ่มสคริปต์ในหน้าแก้ไขประเภทโพสต์ผลงานของคุณ

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

1
ไม่แม่นยำอีกต่อไป @Smartik คำตอบเป็นวิธีที่ถูกต้องแล้ว
Yaron

25

ฉันจะแสดงวิธีการแก้ปัญหาที่ดีกว่าเพราะคำตอบที่ได้รับการยอมรับจะเก่าและไม่ได้ใช้ตะขอที่เหมาะสม

ก่อนอื่น: ในการจัดคิวสคริปต์และสไตล์ในพื้นที่ผู้ดูแลระบบจะต้องใช้งานadmin_enqueue_scriptsและไม่มีอะไรอื่น

ประการที่สอง: ลืม vars ทั่วโลก ใช้วัตถุหน้าจอปัจจุบันเพื่อทำการตรวจสอบที่แตกต่างกัน

นี่คือรหัสการคัดลอกพร้อมวาง:

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

หมายเหตุ: แทนที่'portfolio'ด้วยกระสุนชนิดโพสต์ที่ต้องการ


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
}

ฉันทำการเปลี่ยนแปลงบางอย่างในรหัสนี้ให้ทำงานกับฉัน:

  1. ฉันเปลี่ยนget_stylesheet_directory_uri() . '/admin.js'เป็นplugins_url( '/js/admin.js', __FILE__),- มันเป็นสิ่งจำเป็นเพราะฉันได้พัฒนาปลั๊กอินสำหรับแบนเนอร์ซึ่งเป็นทางออกที่ดีกว่าแทนที่จะสร้าง CPT ภายในfunctions.php

  2. ฉันได้เพิ่ม " true" เพื่อส่งรหัสที่ส่วนท้ายแทนที่จะเป็นส่วนหัว - ช่วยเพิ่มเวลาในการโหลด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.