You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将自定义文章类型设为WordPress子菜单时,添加新项选项不显示

解决WordPress自定义文章类型作为子菜单时“添加新项”不显示的问题

我看了你的代码,问题出在两个地方:自定义文章类型的注册配置,以及子菜单的添加方式。下面一步步帮你解决:

问题分析

  1. 你注册自定义文章类型时设置了'show_in_menu' => false,这本身没问题,但手动添加子菜单的方式不对——直接用edit.php?post_type=shortcode作为子菜单slug,WordPress无法识别这是一个自定义文章类型的列表页,因此不会自动生成对应的“添加新项”子菜单。
  2. 另外,虽然public => true会默认开启show_ui,但显式声明能避免潜在的配置冲突。

解决方案(推荐第一种)

方法一:让WordPress自动生成子菜单(最省心)

修改自定义文章类型的注册代码,把show_in_menu的值设为主菜单的slug(也就是你定义的'options')。这样WordPress会自动帮你添加列表页和“添加新项”的子菜单,不需要手动写额外的add_submenu_page。

修改后的注册代码:

register_post_type( 'shortcode', array(
    'labels' => array(
        'name' => __( 'Shortcodes' ),
        'singular_name' => __( 'Shortcode' ),
        // 可以补充标签让菜单更清晰
        'add_new' => __( 'Add New Shortcode' ),
        'add_new_item' => __( 'Add New Shortcode' ),
    ),
    'public' => true,
    'has_archive' => false,
    'show_in_menu' => 'options', // 关联到你的主菜单slug
    'supports' => array('title'),
) );

主菜单代码保留原样即可:

add_menu_page( 
    'Review', 
    'Review', 
    'manage_options', 
    'options', 
    array( $this->option, 'render_options' ), 
    'dashicons-admin-page', 
    99 
);

这样操作后,你的“Review”主菜单下会自动出现两个子菜单:Shortcodes(列表页)和Add New Shortcode(添加页),完全符合需求。

方法二:手动添加所有子菜单(自定义菜单名称时用)

如果你想自定义子菜单的名称(比如把列表页叫Link),可以手动添加两个子菜单:一个是自定义文章类型的列表页,另一个是添加新项的页面。

首先修改自定义文章类型注册代码,确保show_ui开启:

register_post_type( 'shortcode', array(
    'labels' => array(
        'name' => __( 'Shortcodes' ),
        'singular_name' => __( 'Shortcode' ),
    ),
    'public' => true,
    'has_archive' => false,
    'show_in_menu' => false,
    'show_ui' => true, // 显式开启后台UI
    'supports' => array('title'),
) );

然后修改菜单代码,添加两个子菜单:

add_menu_page( 
    'Review', 
    'Review', 
    'manage_options', 
    'options', 
    array( $this->option, 'render_options' ), 
    'dashicons-admin-page', 
    99 
);

// 添加自定义文章类型列表页
add_submenu_page(
    'options',
    'Link', // 页面标题
    'Link', // 菜单显示名称
    'manage_options',
    'edit.php?post_type=shortcode'
);

// 添加“添加新项”子菜单
add_submenu_page(
    'options',
    'Add New Link', // 页面标题
    'Add New', // 菜单显示名称
    'manage_options',
    'post-new.php?post_type=shortcode'
);

这样就能手动控制子菜单的名称,同时显示“添加新项”选项。

补充说明

  • 权限方面,你用的manage_options是管理员级别的权限,如果需要让编辑等角色也能访问,可以换成edit_posts这类更宽松的权限(根据你的需求调整)。
  • 自定义文章类型的labels可以补充更多内容,让后台界面更友好,比如all_items、edit_item等,让操作逻辑更清晰。

内容的提问来源于stack exchange,提问作者Prits

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:05:41