加载脚本以在管理中自定义帖子类型

时间:2011-11-28 作者:zac

我创建了一个自定义的帖子类型“公文包”,如下所示:

$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\');
但这些对我来说都不重要。如何将这些脚本加载到管理页面?更好的是,如何专门为公文包自定义帖子类型的编辑页面加载它们?

3 个回复
最合适的回答,由SO网友:Joshua Abenazer 整理而成

请尝试以下代码,将脚本添加到公文包自定义帖子类型的编辑页面。

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

SO网友:Andrei Surdu

我会发布一个更好的解决方案,因为公认的答案是旧的does not use the right hooks.

首先:要将脚本和样式排入管理区域,必须使用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\' 使用所需的柱式slug。

SO网友:Anna

// 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
}
我对此代码进行了一些更改,以便为我工作:

我变了get_stylesheet_directory_uri() . \'/admin.js\'plugins_url( \'/js/admin.js\', __FILE__), - 这是必要的,因为我已经为横幅开发了一个插件,这是更好的解决方案,而不是在内部创建CPTfunctions.php

我添加了“true“在页脚区域而不是页眉区域发送代码-缩短加载时间

结束

相关推荐

在wp-admin中操作主题列表

我正在运行一个多站点网络,安装并激活了100多个主题。有没有办法操纵wp admin中可用主题的列表,以便某些主题首先出现在列表中?(一种“特色”或“推荐”)在前9个字母之后,或者按照默认字母顺序排列,就可以了。显然,在谷歌上搜索“wordpress”和“themes”这两个词在这种情况下是毫无结果的。