菜单隐藏时无法创建新的CPT

时间:2012-11-06 16:42:50

标签: wordpress

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

  1. 注册CPT时使用'show_ui'属性隐藏CPT
  2. 使用add_submenu_page()调用
  3. 添加它们

    例如,这是一个名为“公司”的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”重新打开了。我可以添加没有问题的新项目。

1 个答案:

答案 0 :(得分: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' ); 
}

结果:
manipulation of $submenu global


show_ui设置为true。你必须根据自己的需要进行调整。

使用它来检查全局:

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>';
}