WordPress如何将自定义分类法添加到自定义菜单中

4

我搜索了很久,除了我称之为“hack方法”的方法外,找不到其他方法将自定义分类法添加到自定义管理菜单中。

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的功能?

所请求的屏幕截图:

在此输入图片描述


请问您能否给我展示一些您的需求的屏幕截图? - developerme
1
@developerme 不确定如何向您展示我正在寻找的屏幕截图。如果您了解 add_menu_page 的作用,以及自定义文章类型的 show_in_menu 属性,则会知道我正在将菜单项添加到 WordPress 的管理菜单中。然后,要将自定义分类法添加到同一菜单中,无法使用注册自定义分类法时可用的相同属性,因为它只接受 true 或 false,而不是字符串。 - Orlando P.
2个回答

0

我找到的唯一方法是创建一个子菜单,就像您所做的那样,并在我们在分类页面时设置菜单活动状态:

创建您的管理菜单:

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);

-3

进入外观->菜单,找到屏幕顶部选项并点击,然后找到需要在菜单中显示的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接