是否可以将自定义帖子类型菜单添加为另一个自定义帖子类型子菜单


28

我目前正在开发使用两种自定义帖子类型的wordpress插件。我想在这里知道什么:是否可以将自定义帖子类型菜单添加为另一个自定义帖子类型的子菜单?

Answers:


59

是。注册帖子类型时,需要将其设置show_in_menu为您希望在其上显示的页面。

添加自定义帖子类型作为帖子的子菜单

在这里,我们将“电影”帖子类型设置为包含在“帖子”下的子菜单中。

register_post_type( 'movies',
    array(
            'labels' => array(
                    'name' => __( 'Movies' ),
                    'singular_name' => __( 'Movie' )
            ),
    'public' => true,
    'has_archive' => true,
    'show_in_menu' => 'edit.php'
    )
);

如果您已将分类法注册到自定义帖子类型,则也需要将其也添加到页面中。

add_submenu_page()第一个参数是将其分配到的页面,最后是菜单蛞蝓。

add_action('admin_menu', 'my_admin_menu'); 
function my_admin_menu() { 
    add_submenu_page('edit.php', 'Genre', 'Genre', 'manage_options', 'edit-tags.php?taxonomy=genre'); 
}  

将自定义帖子类型添加为另一种自定义帖子类型的子菜单

要将页面添加到其他自定义帖子类型中,请包括帖子类型的查询字符串参数以及页面名称。

要在“娱乐”类型下添加CPT电影及其分类类型,请调整代码,如下所示。

edit.php 变成 edit.php?post_type=entertainment

edit-tags.php 变成 edit-tags.php?taxonomy=genre&post_type=entertainment

register_post_type( 'movies',
    array(
            'labels' => array(
                    'name' => __( 'Movies' ),
                    'singular_name' => __( 'Movie' )
            ),
    'public' => true,
    'has_archive' => true,
    'show_in_menu' => 'edit.php?post_type=entertainment'
    )
);

add_action('admin_menu', 'my_admin_menu'); 
function my_admin_menu() { 
    add_submenu_page('edit.php?post_type=entertainment', 'Genre', 'Genre', 'manage_options', 'edit-tags.php?taxonomy=genre&post_type=entertainment'); 
}

2
你好谢谢。有用。但是子菜单cpt丢失了其子菜单。
Ari

我已经用一种包含分类法的方法来更新我的答案。
epilektric

嗨,谢谢你!我已经找到了方法!但是也许您的会给出更好的结果!
2013年

show_in_menu属性对我不起作用。
弗朗西斯科·科拉莱斯·莫拉莱斯

很抱歉重复。为了使子菜单和paretn菜单保持突出显示状态,您需要给WP一些信息。好的,当屏幕上显示“ my_post_type”时,“ show_in_menu”参数使子菜单为当前/突出显示。现在,我们还需要添加另一个操作,该操作将突出显示父菜单。您可以尝试以下方法:add_filter('parent_file','menu_highlight')); 功能menu_highlight($ parent_file){全局$ plugin_page,$ post_type; 如果('my_post_type'== $ post_type){$ plugin_page ='edit.php?post_type = my_post_type'; //子菜单挂钩名称} return $ parent_file; }
TomeeNS

6

我们的自定义帖子类型:

$args['show_in_menu'] = false;
register_post_type('custom_plugin_post_type', $args);

将他添加为现有的自定义帖子类型(例如“产品”):

$existing_CPT_menu = 'edit.php?post_type=product';
$link_our_new_CPT = 'edit.php?post_type=custom_plugin_post_type';
add_submenu_page($existign_CPT_menu, 'SubmenuTitle', 'SubmenuTitle', 'manage_options', $link_our_new_CPT);

或为我们的自定义插件菜单添加:

// Create plugin menu
add_menu_page('MyPlugin', 'MyPlugin', 'manage_options', 'myPluginSlug', 'callback_render_plugin_menu');

// Create submenu with href to view custom_plugin_post_type
$link_our_new_CPT = 'edit.php?post_type=custom_plugin_post_type';
add_submenu_page('myPluginSlug', 'SubmenuTitle', 'SubmenuTitle', 'manage_options', $link_our_new_CPT);

谢谢!对我有帮助。
NSukonny
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.