从自定义发布菜单中删除默认子页面

时间:2013-04-14 作者:Ionut

我正在使用创建自定义帖子类型register_post_type. 运行该功能后,管理面板中会出现一个新的菜单项。

此项下有以下菜单项:new_itemall_items. 考虑到我创建了一个自定义页面来管理这些帖子,有并没有办法了解这两个选项。

2 个回复
最合适的回答,由SO网友:brasofilo 整理而成

可以操纵全局变量$submenu 并将其移除。在正常情况下,索引键值为5 (所有项目)和10 (新项目)。在此示例中,post类型为portfolio:

add_action( \'admin_init\', \'remove_cpt_submenus_wpse_95797\' );

function remove_cpt_submenus_wpse_95797()
{
    global $submenu;
    unset(
        $submenu[\'edit.php?post_type=portfolio\'][5], 
        $submenu[\'edit.php?post_type=portfolio\'][10] 
    );
}

SO网友:s_ha_dum

Register the post type 具有show_ui 设置为false。就像Codex中样本的修改版本一样:

function codex_custom_init() {
  $labels = array(
    \'name\' => \'Books\',
    \'singular_name\' => \'Book\',
    \'add_new\' => \'Add New\',
    \'add_new_item\' => \'Add New Book\',
    \'edit_item\' => \'Edit Book\',
    \'new_item\' => \'New Book\',
    \'all_items\' => \'All Books\',
    \'view_item\' => \'View Book\',
    \'search_items\' => \'Search Books\',
    \'not_found\' =>  \'No books found\',
    \'not_found_in_trash\' => \'No books found in Trash\', 
    \'parent_item_colon\' => \'\',
    \'menu_name\' => \'Books\'
  );

  $args = array(
    \'labels\' => $labels,
    \'public\' => true,
    \'publicly_queryable\' => true,
    \'show_ui\' => false, // this is the change
    // \'show_in_menu\' => true, // only works with show_ui true
    \'query_var\' => true,
    \'rewrite\' => array( \'slug\' => \'book\' ),
    \'capability_type\' => \'post\',
    \'has_archive\' => true, 
    \'hierarchical\' => false,
    \'menu_position\' => null,
    \'supports\' => array( \'title\', \'editor\', \'author\', \'thumbnail\', \'excerpt\', \'comments\' )
  ); 

  register_post_type( \'book\', $args );
}
add_action( \'init\', \'codex_custom_init\' );
注意:使用。。。

    \'show_ui\' => true,
    \'show_in_menu\' => false,
。。。如果导航到该链接,则不会获得菜单项,但会获得管理页面,因此可以将其从菜单中删除,但如果需要,仍有一个正常运行的默认编辑系统。

编辑:

您说过您创建了一个自定义页面来管理这些帖子。您必须已经为此注册了自己的管理页面。我不知道你为什么需要生成一个。换句话说,我不知道为什么您只需要删除菜单就需要生成这些默认管理页面。然而

function remove_add_new_menu_wpse_94776() {
    remove_submenu_page(\'edit.php?post_type=book\',\'edit.php?post_type=book\');
    remove_submenu_page(\'edit.php?post_type=book\',\'post-new.php?post_type=book\');
}
add_action(\'admin_menu\',\'remove_add_new_menu_wpse_94776\');
那就是copied from another thread, 从函数名的数字后缀可以看出。上述情况可能会导致整个菜单仅在适当的情况下折叠到顶层,除非有其他菜单,这可能是您拥有的,但为了完整性,这里是一种虚拟菜单。

function remove_only_add_new_wpse_95797() {
  global $submenu;
  add_submenu_page(
    \'edit.php?post_type=book\',
    \'test\',
    \'test\',
    \'edit_posts\',
    basename(\'test\'),
    \'test_cb_wpse_95797\'
  );
}
function test_cb_wpse_95797() {
  echo \'hi\';
}
add_action(\'admin_menu\',\'remove_only_add_new_wpse_95797\');

结束