尝试将脚本添加到特定管理页面不起作用

时间:2013-05-11 作者:Roc

我试图实现的是加载一个。编辑js文件。php页面,但是代码不是专门针对该页面的。我已经将相同代码类型的代码应用于其他CPT页面,但由于某些原因,此CPT页面没有注册脚本。

以下是我使用的代码:

add_action( \'admin_menu\', \'contacts_table_add_pages\', 99 );
function contacts_table_add_pages(){
    $menu = add_menu_page( \'Contacts\', \'Contacts\', \'publish_posts\', \'edit.php?post_type=contact\' );
    $submenu = add_submenu_page(\'contacts\', \'Add Contact\', \'Add Contact\', \'publish_posts\', \'post-new.php?post_type=contact\');

    add_action( \'load-\' . $menu, \'contacts_table_add_custom_css_js\', 11 );
}

function contacts_table_add_custom_css_js() {
    add_action( \'admin_enqueue_scripts\', \'contacts_table_css_js\', 11 );
}

function contacts_table_css_js() {
    wp_enqueue_script( \'contacts\', PLUGIN_URL . \'contacts/includes/contacts.js\' );
}
我之所以要创建一个新的CPT菜单项,是因为它曾经是另一个插件子菜单列表的一部分,所以我将它从那里删除,并创建了自己的菜单项。

我对另一个插件的CPT也做了同样的操作,这个插件运行得很好。这只是来自另一个插件的CPT不起作用。

有什么线索吗?

谢谢Roc。

1 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

我认为你使用了错误的方法。与其删除子菜单项,不如更改post类型的注册方式,并更改show_in_menu 论点延迟钩住init并更改参数。

<?php
add_action(\'init\', \'wpse99123_post_type_switcher\', 999);
function wpse99123_post_type_switcher()
{
    global $wp_post_types;
    $wp_post_types[\'contact\']->show_in_menu = true; // put it back in the menu
}
然后,要加载CSS/JS/whatever,您需要连接到load-edit.php 并检查当前屏幕的post类型,并从中添加排队功能。

<?php
add_action(\'load-edit.php\', \'wpse99123_load_edit\');
function wpse99123_load_edit()
{
    $screen = get_current_screen();

    if (!isset($screen->post_type) || \'contact\' !== $screen->post_type) {
        return; // not where we want to be, bail
    }

    // add enqueues here.
    add_action(\'admin_enqueue_scripts\', \'wpse99123_enqueue\');
}

function wpse99123_enqueue()
{
    // ...
}
你必须这样做load-edit.php 因为$screen->post_type 将在您的联系人编辑中显示联系人(post.php) 并添加新的(post-new.php) 第页。

结束

相关推荐