我假设当你说你“将鼠标悬停在它上面,它会显示列表中显示的自定义帖子类型”时,你指的是子菜单。以下使用admin_menu
要创建一个空白的父菜单,我们将遍历公共帖子类型,将其显示为子菜单:
/**
* Add an Admin Menu which contains submenus of public post types
* - https://codex.wordpress.org/Plugin_API/Action_Reference/admin_menu
* - https://developer.wordpress.org/reference/hooks/admin_menu/
*
* @return void
*/
function wpse_q_241760() {
$post_types = get_post_types( array(
\'public\' => true,
), \'objects\' );
if( ! empty( $post_types ) ) {
add_menu_page(
\'Post Types\', // Page Title ( doesn\'t matter )
\'Post Types\', // Menu Title
\'edit_posts\', // Capability to view this menu item
\'javascript:void(0);\', // URL ( slug )
\'\', // Callback Function
\'dashicons-book\', // Dashicon
24 // Menu Position
);
foreach( $post_types as $type ) {
add_submenu_page(
\'javascript:void(0);\', // Parent URL Slug
$type->labels->name, // Page Title ( doesn\'t matter in this case )
$type->labels->name, // Menu Title
\'edit_posts\', // Cability to view
"edit.php?post_type={$type->name}" // URL ( slug )
);
}
remove_submenu_page( \'javascript:void(0);\', \'javascript:void(0);\' );
}
}
add_action( \'admin_menu\', \'wpse_q_241760\' );
以上
add_menu_page()
需要传递某种链接-因为我们在该链接上没有任何可显示的内容(没有
post_type
绑定到此页面,这是一个虚拟页面)我选择链接到
javascript:void(0);
相反,它告诉我们的浏览器不要在任何地方导航。这允许我们将菜单项悬停,然后单击其中一个帖子类型链接。它还添加了一个同名的子菜单,但我们不需要它,所以我们在函数调用结束时将其删除。
这个get_post_types()
函数有几个参数要过滤public
对你的案子不起作用。