【问题标题】:Can't create new CPTs when menu hidden隐藏菜单时无法创建新的 CPT
【发布时间】:2012-10-26 16:06:25
【问题描述】:

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

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

例如,下面是一个调用名为“公司”的 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”重新打开了它。然后我可以毫无问题地添加新项目。

【问题讨论】:

    标签: wordpress


    【解决方案1】:

    那是因为在/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' ); 
    }
    

    结果:


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

    【讨论】:

    • 这只是一个测试环境,因此令人困惑的 CPT (book/portfolio)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多