插件管理菜单中的EDIT-TAGS.php在活动页面时隐藏

时间:2014-07-15 作者:tommyf

对于我正在构建的插件,我在admin中的自定义主菜单项中添加了一个子菜单作为子菜单。子菜单页是edit-tags.php 页这将按预期显示在主菜单项下。单击此子菜单项时,用户将进入正确的页面,但主菜单项会向下折叠,隐藏当前打开的子菜单项。

我最初的感觉是父slug属性是错误的,但我添加的其他子菜单使用相同的父slug属性,并且它们工作正常。很明显,我在add_submenu_page() 函数,但我不知道是什么。

下面是我注册子菜单的方式:

$this->plugin_screen_dashboard = add_submenu_page(
    $this->plugin_slug, // Parent slug
    __( \'Subscriber Lists\', $this->plugin_slug ), // Page title
    __( \'Subscriber Lists\', $this->plugin_slug ), // Menu title
    \'manage_options\', // Capability
    \'edit-tags.php?taxonomy=subscriber_list&post_type=subscriber\' // Menu slug
);

--Edit--

以下是我注册主菜单项的方式:

$this->plugin_screen_hook_suffix = add_menu_page(
    __( \'My Plugin\', $this->plugin_slug ), // Page title
    __( \'My Plugin\', $this->plugin_slug ), // Menu title
    \'manage_options\', // Capability
    $this->plugin_slug, // Menu slug
    array( $this, \'display_plugin_admin_page\' ), // Function
    \'dashicons-plus-alt\' // Icon url
);

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

我已经设法解决了这个问题,在插件的编辑标签页面上使用Javascript“打开”菜单项。

Relevant plugin PHP file

$screen = get_current_screen();
// Check we\'re only on the edit-tags page in the plugin
if (\'edit-tags\' === $screen->base && \'subscriber\' === $screen->post_type) {
    wp_enqueue_script( $this->plugin_slug . \'-subscriber-edit-tags-script\', plugins_url(\'assets/js/subscriber-edit-tags.js\', __FILE__ ), array(\'jquery\') );
}
subscriber-edit-tags.js (使用jQuery)

(function ( $ ) {
    /**
     * File is called only when on edit tags under subscriber post type
     */

    $(\'.toplevel_page_my_plugin\')
        .removeClass(\'wp-not-current-submenu\')
        .addClass(\'wp-has-current-submenu wp-menu-open\')
        .find(\'li\').has(\'a[href*="edit-tags.php"]\')
        .addClass(\'current\');

}(jQuery));

SO网友:Hunter Williams

我有一个类似的问题,并且能够通过使用parent\\u文件过滤器来解决不正确的菜单行为$parent\\u文件在/wp admin/edit标记中设置。php文件,但它需要根据您的用例进行更改。

add_filter(\'parent_file\', \'filter_subscriber_menu\');

function filter_subscriber_menu($file) {
    $screen = get_current_screen();
    if (\'edit-tags\' === $screen->base && \'subscriber\' === $screen->post_type) {           
    // in my case I drilled down to if($screen->id...); I used what you posted in your if clause above     
    $file = {$this->plugin_slug}; //probably need to set this as a string; for the parent slug represented by $this->plugin_slug ;  
    }
return $file;

}

SO网友:Brett

对于现在(2019年3月)正在关注这个问题的任何人来说,不幸的是,这个问题仍然存在于5.1中。。。!

因此WP菜单中的HTML元素已经更改,所以现在这个jQuery脚本可以工作了:

jQuery(document).ready( function($) {
    $(".menu-icon-sdesk-kb#menu-posts-sdesk-kb")
    .removeClass("wp-not-current-submenu")
    .addClass("wp-has-current-submenu wp-menu-open")

    $("#menu-posts-sdesk-kb a.wp-not-current-submenu")
    .removeClass("wp-not-current-submenu")
    .addClass("wp-has-current-submenu wp-menu-open")
});
sdesk kb=我的CPT分类名称

结束

相关推荐

Back up post tags

备份帖子标签的最佳方法是什么?我想删除所有帖子类型上的所有现有标签,但如果出现问题,我希望能够恢复这些标签。。