2

我正在添加大量自定义帖子类型和分类法,因此如果我没有将它们全部添加到管理菜单的顶层,它通常会在视觉上更清晰。相反,我更愿意将它们添加到适当的子菜单下。我用这两个步骤的方法没有太多的努力做到了这一点:

  1. 注册 CPT 时使用“show_ui”属性隐藏 CPT
  2. 使用 add_submenu_page() 调用将它们添加回来

例如,下面是一个名为“companies”的 CPT 的 add_submenu_page 调用示例:

add_submenu_page (LG_ADMIN_MENU,"Companies","Companies","manage_options",'edit.php?post_type=companies');

通过这两个步骤,我现在可以查看 CPT,我可以修改现有属性,甚至可以删除一条记录,但我不能做的是添加一条记录。当我单击“添加新”按钮时,它会返回一个仅显示“无效帖子类型”的白屏。

现在,如果我只是打开普通的顶级菜单(不理会所有其他设置),我会得到菜单现在显示为子菜单(来自我的 add_submenu_page 调用)和顶级菜单(因为我已经打开用“show_ui”重新打开。然后我可以毫无问题地添加新项目。

4

1 回答 1

2

那是因为在第一行/wp-admin/post-new.php我们有这个:

if ( !isset($_GET['post_type']) )
    $post_type = 'post';
elseif ( in_array( $_GET['post_type'], get_post_types( array('show_ui' => true ) ) ) )
    $post_type = $_GET['post_type'];
else
    wp_die( __('Invalid post type') );

你没有通过那个'show_ui' => true条件。

是时候发挥创意了:)

add_action( 'admin_menu', 'so_13255525_admin_menu' );

function so_13255525_admin_menu() 
{
    global $submenu;

    $submenu['index.php'][25] = $submenu['edit.php?post_type=portfolio'][5];
    $submenu['index.php'][30] = $submenu['edit.php?post_type=portfolio'][10];

    remove_menu_page( 'edit.php?post_type=portfolio' ); 
}

结果是:
$submenu 全局操作


show_ui设置为真。您必须对其进行调整以适应您的需求。

使用它来检查全局:

add_action( 'admin_notices', 'so_13255525_admin_notice' );

function so_13255525_admin_notice() 
{
    if( !current_user_can( 'delete_plugins' ) )
        return;
    global $submenu;
    echo '<pre>' . print_r( $submenu, true ) . '</pre>';
}
于 2012-12-03T05:33:43.633 回答