如何将Custom Post Type设为WPTutor LMS插件的顶级菜单?
解决方法:将Course自定义文章类型设为WPTutor LMS的顶级菜单
要把Course的列表页面设为插件顶级菜单,同时移除原插件主页面,需要调整自定义文章类型(CPT)的注册参数,再手动注册顶级菜单指向CPT列表页,具体操作如下:
1. 调整Course CPT的注册参数
注册CPT时,设置show_in_menu为false,阻止WordPress自动将其添加到现有菜单中:
function wptutorlms_register_course_cpt() { $args = array( 'public' => true, 'label' => 'Courses', 'show_ui' => true, 'show_in_menu' => false, // 禁用WP自动添加菜单 'supports' => array('title', 'editor', 'thumbnail'), // 其他CPT配置参数(比如rewrite、has_archive等) ); register_post_type( 'course', $args ); } add_action( 'init', 'wptutorlms_register_course_cpt' );
2. 手动注册顶级菜单指向CPT列表
使用add_menu_page创建顶级菜单,直接链接到Course的列表页面(edit.php?post_type=course):
function wptutorlms_add_top_level_menu() { // 添加顶级菜单 add_menu_page( 'WPTutor LMS Courses', // 后台页面标题 'WPTutor LMS', // 左侧菜单显示的标题 'manage_options', // 访问该菜单所需的权限 'edit.php?post_type=course', // 菜单跳转的URL(CPT列表页) '', // 回调函数留空,因为直接跳转至现有页面 'dashicons-welcome-learn-more', // 菜单图标(选适合LMS的Dashicon) 6 // 菜单位置(6在"文章"之后,"媒体"之前) ); // 如果之前注册过插件主菜单,用下面的代码移除它 // remove_menu_page('your-old-main-menu-slug'); } add_action( 'admin_menu', 'wptutorlms_add_top_level_menu' );
关键说明
- 之前设置无效的原因:当你设置
show_in_menu => 'wptutorlms'时,WordPress默认会把该CPT作为指定顶级菜单的子项添加,而非替换成顶级菜单。 - 权限调整:如果不需要
manage_options这么高的权限,可以自定义权限(比如edit_courses),确保只有指定角色能访问。 - 菜单位置:数字越小,菜单在左侧越靠前,可根据需求调整(比如5是"文章"的位置,10是"媒体")。
内容的提问来源于stack exchange,提问作者Kaushal Patel
相关产品推荐
相关产品推荐

