관리자에서 맞춤 게시물 유형으로 만 스크립트로드


18

다음과 같이 사용자 정의 게시물 유형 "portfolio"를 작성했습니다.

$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
참고 : 인큐는 초기화되지 않아야합니다. (많은 사람들이 그렇게하지만 인큐를위한 올바른 장소는 아닙니다) ..
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다른 것을 사용 하지 않아야합니다 .

둘째 : 모든 글로벌 변수를 잊어 버려라. 현재 화면 개체를 사용하여 다른 검사를 수행하십시오.

준비된 복사 붙여 넣기 코드는 다음과 같습니다.

<?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.