我创建了一个自定义帖子类型并将其隐藏
使用
register_post_type()
和使用
的菜单页面
add_menu_page()
和add_submenu_page()
自定义帖子类型的链接为page=edit.php?post_type=survey
,并且菜单页面为admin.php?page=my_survey
我隐藏custom post type
是因为我不想显示它,我只想有一个菜单,但是有一个指向custom post type
问题是菜单中的所有链接都有前缀
中添加链接时admin.php?page=
,当我在
menu_slug => 'edit.php?post_type=survey'
它添加了
admin.php?page=edit.php?post_type=survey
我是否可以仅从一个子菜单中删除该前缀?
我正在开发OOP 这就是我添加子菜单的方式
public function setSubPages()
{
$this->subpages = [
[
'parent_slug' => 'survey',
'page_title' => 'Survey Plugin',
'menu_title' => 'Survey',
'capability' => 'manage_options',
'menu_slug' => 'edit.php?post_type=survey',
'callback' => [$this->callbacks, 'adminDashboard'],
];
}
和我的自定义帖子类型
public function activate()
{
$labels = [
'name' => 'survey',
'singular_name' => 'survey',
];
$args = [
'labels' => $labels,
'public' => true,
'has_archive' => false,
'menu_icon' => 'dashicons-email-alt',
'supports' => false,
'exclude_from_search' => true,
'publicly_queryable' => false,
'show_in_menu' => false
];
register_post_type( 'survey', $args );
}
如果我不够清楚,请告诉我 谢谢
答案 0 :(得分:1)
这是我解决问题的方法,因为那些人有相同的问题 希望有帮助
自定义帖子类型
public function activate()
{
$labels = [
'name' => 'Email List',
'singular_name' => 'Email List',
];
$args = [
'labels' => $labels,
'public' => false,
'has_archive' => false,
'menu_icon' => 'dashicons-email-alt',
'supports' => false,
'exclude_from_search' => true,
'publicly_queryable' => false,
'show_in_menu' => 'survey_plugin' // <----- admin page menu_slug
];
register_post_type( 'surveyemail', $args );
}
管理员调查页面
public function setPages()
{
$this->pages = [
[
'page_title' => 'Survey Plugin',
'menu_title' => 'survey',
'capability' => 'manage_options',
'menu_slug' => 'survey_plugin', // same as show_in_menu custom post type
'callback' => [$this->callbacks, 'adminDashboard'],
'icon_url' => 'dashicons-format-aside',
'position' => 25
]
];
}
public function setSubPages()
{
$this->subpages = [
[
'parent_slug' => 'survey_plugin', // match menu_slug $this->page
'page_title' => 'Welcome',
'menu_title' => 'Welcome page',
'capability' => 'manage_options',
'menu_slug' => 'Welcome',
'callback' => [$this->callbacks, 'adminDashboard'],
],
[
'parent_slug' => 'survey_plugin',// match menu_slug $this->page
'page_title' => 'feedback',
'menu_title' => 'feedback',
'capability' => 'manage_options',
'menu_slug' => 'feedback',
'callback' => [$this->callbacks, 'adminDashboard'],
]
];
}
答案 1 :(得分:0)
首先,如果随后在参数(https://codex.wordpress.org/Function_Reference/register_post_type)中取消将其public
设置为true
,则没有任何意义。
第二件事:您不能以这种方式使用菜单项,因为它的定义如下:
$ menu_slug
(字符串)(必需)引用此菜单所用的子文件名。应该 此菜单唯一,仅包含小写字母数字,破折号, 并强调要与sanitize_key()兼容的字符。
但是,有一种方法可以创建自定义子菜单URL。请在SO WordPress上检查以下线程以获取更多信息:https://wordpress.stackexchange.com/questions/83768/add-menu-and-submenu-in-admin-with-a-url-instead-of-slug?answertab=votes#tab-top
但是请小心在WP-Admin中的操作,如果要在WP-Admin中使帖子类型可编辑,通常这是通过参数对其进行编辑的最佳方法。