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

如何调整WordPress自定义文章类型的子菜单顺序

调整WordPress自定义文章类型子菜单顺序的有效方案

你之前的尝试存在两个核心问题:

  • 第一段代码使用的menu_order钩子仅控制主菜单顺序,和子菜单无关;
  • 第二段代码用了WordPress不存在的submenu_order钩子,且自定义文章类型slug存在拼写错误(你的CPT是datasets,代码里写成了dataset)。

以下是可直接生效的解决方案,通过操作后台子菜单的全局数组来调整顺序:

add_action( 'admin_menu', 'custom_datasets_submenu_order', 999 );
function custom_datasets_submenu_order() {
    // 声明全局子菜单变量
    global $submenu;
    
    // 自定义文章类型的父菜单slug
    $parent_slug = 'edit.php?post_type=datasets';
    
    // 确认父菜单存在,避免报错
    if ( !isset( $submenu[$parent_slug] ) ) {
        return;
    }
    
    // 定义目标子菜单顺序(slug需与实际注册项完全匹配)
    $desired_order = array(
        'edit.php?post_type=datasets', // All Datasets
        'edit-tags.php?taxonomy=species&post_type=datasets', // Species
        'edit-tags.php?taxonomy=group&post_type=datasets', // Groups
        'edit.php?post_type=datasets&page=upload-homologs-relations', // Upload Relational CSV
        'post-new.php?post_type=datasets' // Add New Dataset
    );
    
    // 重新构建子菜单数组
    $new_submenu = array();
    foreach ( $desired_order as $slug ) {
        foreach ( $submenu[$parent_slug] as $menu_item ) {
            if ( $menu_item[2] === $slug ) {
                $new_submenu[] = $menu_item;
                break;
            }
        }
    }
    
    // 替换原有的子菜单
    $submenu[$parent_slug] = $new_submenu;
}

关键注意事项:

  • 优先级设置:用999作为钩子优先级,确保所有子菜单(分类法、自定义页面)都注册完成后再调整顺序;
  • slug准确性:请核对每个菜单项的slug:
    • 若Groups分类法注册时slug为groups,需将代码中的group改为groups;
    • 自定义页面的upload-homologs-relations需与你注册子菜单时的page参数一致;
  • 代码位置:将这段代码添加到主题functions.php或自定义插件的PHP文件中即可生效。

内容的提问来源于stack exchange,提问作者Syed Ali Ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:03:27