如何在 WordPress 中将子菜单添加到自定义帖子类型菜单
已发表: 2020-01-23
如果您想将子菜单项添加到自定义帖子类型菜单,您应该使用简单的代码片段轻松完成此操作。 理想情况下,自定义帖子类型菜单具有默认添加新帖子、分类和所有帖子菜单,但可以将另一个子菜单项添加到 WordPress 设置管理页面。
在学习如何将子菜单添加到自定义帖子类型菜单之前,重要的是,您了解如何在不使用插件的情况下在 WordPress 中注册自定义帖子类型。
您需要自定义帖子类型的 slug 作为add_submenu_page()函数的参数之一,以便您在自定义帖子类型菜单下显示子菜单。 因此,让我们首先快速回顾一下如何在 WordPress 主题中注册自定义帖子类型。
注册自定义帖子类型
虽然,我在该帖子中解释了有关如何向 WordPress 添加自定义帖子类型的所有细节; 我将快速分享您在 WordPress 中添加自定义帖子类型所需的代码。 注册自定义帖子类型的代码如下:
/**
* 自定义帖子类型 - register_post_type()
* @description- Njengah 教程自定义帖子类型示例
* @link -https://gist.github.com/Njengah/839466b773085ac2430772e081357cee
*
*/
add_action('init', "njengah_tutorial_cpt");
函数 njengah_tutorial_cpt(){
$标签=数组(
'name' => _x('Tutorials', '帖子类型通用名称'),
'singular_name'=> _x('Tutorial', 'post type 单数名称'),
'menu_name' => _x('Tutorials', 'admin menu'),
'name_admin_bar' => _x('Tutorial', 'add new on admin bar'),
'add_new' => _x('新增', ''),
'add_new_item' => __('添加新教程'),
'edit_item' => __('编辑教程'),
'new_item' => __('新教程'),
'all_items' => __('所有教程'),
'view_item' => __('查看教程'),
'search_items' => __('搜索教程'),
'not_found' => __('没有找到教程'),
'not_found_in_trash' => __('没有在垃圾箱中找到教程'),
'parent_item_colon' => __('家长教程:'),
);
$args = 数组(
'分层' => 真的,
'标签' => $标签,
'公共' => 真的,
'publicly_queryable' => 真,
'描述' => __('描述'),
'show_ui' => 真,
'show_in_menu' => 真,
'show_in_nav_menus' => 真,
'query_var' => 真,
'重写' => 真的,
'query_var' => 真,
'rewrite' => array('slug' => 'tutorial'),
'capability_type' => '页面',
'has_archive' => 真,
'menu_position' => 22,
“show_in_rest” => 真,
'supports' => array('title', 'editor', 'author', 'thumbnail', 'revisions', 'page-attributes', 'custom-fields' )
);
register_post_type('tutorial', $args);
}您应该将此代码添加到您的子主题的functions.php文件中,并且应该在您的仪表板中看到自定义帖子类型,如下图所示:


此代码也可以添加到自定义 WordPress 插件以注册自定义帖子类型。 您还应该将代码中的“教程”关键字替换为您各自的自定义帖子类型名称,例如“书”、“电影”等。
将子菜单添加到自定义帖子类型菜单
现在我们要关注如何在自定义帖子类型菜单下添加子菜单页面。
为了快速概览,以下是将子菜单项添加到自定义帖子类型菜单应执行的步骤:
- 创建一个动作钩子以使用相应的回调函数注册子菜单。 在这种情况下,需要创建两个函数。
- 将 add_submenu_page( ) 的第一个参数替换为特定的编辑帖子类型 slug 示例php?post_type='name-of-your-post-type-slug'
- 在php中添加代码,您将成功地将子菜单添加到自定义帖子类型。
添加子菜单页面功能
此函数add_submenu_page用于在所有管理菜单页面中添加子菜单,您可以使用 remove_submenu_page 函数从 WordPress admin 中删除子菜单。
add_submenu_page()函数默认有7个参数,一般代码可以表示如下:
add_submenu_page(
字符串 $parent_slug,
字符串 $page_title,
字符串 $menu_title,
字符串 $capability,
字符串 $menu_slug,
可调用 $function = '',
int $位置=空
)添加子菜单页面功能参数描述如下:
| 范围 | 描述 |
| $parent_slug | 这是父菜单示例的 slug 名称,在这种情况下,它将是 edit.php?post_type ='tutorials' |
| $page_title | 要在标题标签示例“教程子页面示例”中显示的文本 |
| $menu_title | 要在我们正在创建的子菜单中显示的文本示例“教程” |
| $能力 | 可以访问此菜单示例“管理员”的用户的 WordPress 角色功能 |
| $menu_slug | 这是我们将创建示例“tutorials_subpage_example”的页面的 slug |
| $函数 | 将在我们正在创建的子页面上显示我们想要的信息的回调函数。 示例标题“教程子页面示例” |
| $位置 | 这是菜单项相对于其他子菜单的位置; 您可以使用此数字上下推动菜单以满足您的喜好。 |
为了在本教程中进行说明,我们将在上面创建的教程自定义帖子中添加子菜单页面,如下图所示:

将自定义帖子类型 Slug 添加到父 Slug 参数
要注册我们的子菜单,我们应该将以下代码添加到下面的functions.php文件中,我们在其中添加了注册教程自定义帖子类型的代码:
/**
*自定义帖子类型将子页面添加到自定义帖子菜单
* @description- Njengah 教程自定义帖子类型子菜单示例
* @link - https://gist.github.com/Njengah/0764f2c88742c19b67a212c914c9f25f
*
*/
// 钩
add_action('admin_menu', 'add_tutorial_cpt_submenu_example');
//admin_menu回调函数
函数 add_tutorial_cpt_submenu_example(){
add_submenu_page(
'edit.php?post_type=tutorial', //$parent_slug
'教程子页面示例', //$page_title
'教程设置', //$menu_title
'manage_options', //$ 能力
'tutorial_subpage_example',//$menu_slug
'tutorial_subpage_example_render_page'//$函数
);
}
//add_submenu_page回调函数
功能 tutorial_subpage_example_render_page() {
echo '<h2> 教程子页面示例</h2>';
}当您将代码添加到 functions.php 或插件基础文件中时,您应该会看到添加了教程设置,如下所示,以及上面讨论的所有相应参数,如下图所示:

结论
您可以轻松将此代码添加到主题的functions.php并进行相应调整以成功将子菜单添加到自定义帖子类型菜单。 本教程的要点是添加自定义帖子类型 slug 作为add_submenu_page函数的父 slug 将导致在自定义帖子类型菜单下添加子菜单页面。 我希望您可以在您的 WordPress 主题开发中使用此解决方案,特别是在您需要一些特定自定义帖子类型的设置页面时; 这当然是理想的解决方案。
