问题来了是因为custom post_types应该在WP init上创建,但是不能在admin_menu钩子之前添加自定义菜单项。
虽然您知道 post_type 在菜单中的位置,但您可以像这样强制将其放置在另一个菜单中
创建一个新的顶部菜单项:
<?php
add_action('admin_menu', 'add_menu');
function add_menu(){
add_menu_page(
'Menu name',
'Menu name',
'publish',
'your_menu_slug',
'your_function_name'
);
}
?>
创建自定义帖子类型:
(我这里只放了例子有用的参数)
<?php
add_action('init', 'create_cpt');
function create_cpt(){
register_post_type(
'your_cpt',
array(
'label' => 'Your CPT',
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 901 //(or any not used numeric value)
)
);
}
?>
此时,您的菜单应显示自定义帖子类型的项目和自定义页面的另一个项目。
要在自定义页面下移动自定义帖子类型,请添加更改 add_menu 函数,如下所示:
<?php
function add_menu(){
add_menu_page(
'Menu name',
'Menu name',
'publish',
'your_menu_slug',
'your_function_name'
);
// get the global menu object
global $menu,$submenu;
// Add the top menu item to your custom page
$submenu['your_menu_slug'][] = $menu[901];
//(must be the same numeric value as in register_post_type)
// Finnaly, remove the initial menu item
unset($menu[901]);
}
?>
现在您的自定义帖子类型应该出现在自定义页面菜单项下。