Wordpress 将自定义分类添加到自定义菜单

问题描述 投票:0回答:1

我搜索了又搜索,除了我所说的“黑客方法”将自定义分类法添加到自定义管理菜单之外,找不到其他方法。

add_menu_page(
        'Practice Directory',
        'Practice Directory',
        'read',
        'practice-directory',
        '',
        'dashicons-welcome-widgets-menus',
        40
);

然后我注册我的帖子类型并确保它们使用

'show_in_menu'          => 'practice-directory',

这有效,自定义帖子类型显示在我的自定义菜单中。

但是自定义分类法不接受同一属性的字符串(仅 true 或 false)。

    'show_in_menu'          => 'false',

因此要添加它,您必须创建一个子菜单页面

add_submenu_page(
    'practice-directory',
    'Doctors',
    'Doctors',
    'edit_posts',
    'edit-tags.php?taxonomy=doctor',
    false
);

这是一种“黑客”的做法。

还有别的办法吗? 在不修改 WordPress 核心的情况下我可以覆盖 register_taxonomy 函数以便能够接受“show_in_menu”字符串并遵循 register_post_type 的功能吗?

要求截图

enter image description here

php wordpress custom-taxonomy
1个回答
2
投票

我发现的唯一方法是像您一样创建一个子菜单,并在我们位于分类页面时将菜单设置为活动状态:

创建您的管理菜单:

add_menu_page('Page title', 'Menu title', 'read', 'menu_slug', false, 'dashicons-welcome-widgets-menus', 25);

如果需要,添加自定义帖子类型:

register_post_type('your_cpt_name', array(
    ...
    'show_in_menu' =>  'menu_slug',//your previously created menu slug
    ...
));

添加您的自定义分类法:

register_taxonomy('your_taxonomy_name', 'your_cpt_name', $args);

添加您的分类子菜单:

add_submenu_page('menu_slug', 'Page Title', 'Menu Title', 'custom_post_capability', 'edit-tags.php?taxonomy=your_taxonomy_name&post_type=your_cpt_name', false);

添加过滤器以在活动时突出显示菜单:

add_filter('parent_file', 'highlightTaxoSubMenu');

function highlightTaxoSubMenu($parent_file){
    global $submenu_file, $current_screen, $pagenow;
    if ($current_screen->post_type === 'your_cpt_name') {
        if ( $pagenow === 'edit-tags.php' && $current_screen->taxonomy === 'your_taxonomy_name' ) {
            $submenu_file = 'edit-tags.php?taxonomy=your_taxonomy_name&post_type=your_cpt_name';
        }
        $parent_file = 'menu_slug';//your parent menu slug
    }
    return $parent_file;
}

编辑: 当您的 CPT 被放置为管理中的子菜单时,如果自定义用户角色没有“edit_posts”功能(即使他们具有您的 CPT 编辑功能),则他们无法为此 CPT 创建新帖子。 解决方法是在子菜单中为此自定义帖子添加“创建新帖子”链接

add_submenu_page('menu_slug', 'Add', 'Add', 'custom_post_capability', 'post-new.php?post_type=your_cpt_name', false);
© www.soinside.com 2019 - 2024. All rights reserved.