如何调整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参数一致;
- 若Groups分类法注册时slug为
- 代码位置:将这段代码添加到主题
functions.php或自定义插件的PHP文件中即可生效。
内容的提问来源于stack exchange,提问作者Syed Ali Ahmed
相关产品推荐
相关产品推荐

