如何仅移除WordPress仪表盘外观菜单中的Themes选项
仅移除WordPress仪表盘外观菜单下Themes(主题)选项的实现方案
remove_menu_page( 'themes.php' )会删除整个外观菜单,原因是外观顶级菜单本身的访问slug就是themes.php;remove_submenu_page()无法单独移除目标子项,是因为外观菜单下第一个子项Themes的slug和顶级菜单完全一致,没有附加查询参数,函数无法区分顶级菜单与该子项,会触发整个外观菜单被移除的逻辑。
实现代码
将以下代码添加到当前启用主题的functions.php文件,或自定义站点功能插件中即可生效:
// 移除外观菜单下的Themes子菜单项 add_action( 'admin_menu', function() { global $submenu; // 外观菜单组中索引为0的子项即为Themes选项 if ( isset( $submenu['themes.php'][0] ) ) { unset( $submenu['themes.php'][0] ); } }, 999 ); // 拦截直接访问主题页面的请求,避免通过手动输入地址绕过菜单限制 add_action( 'admin_init', function() { global $pagenow; // 访问无附加参数的themes.php时,自动跳转到指定的外观子页面,默认跳转至自定义器页面 if ( $pagenow === 'themes.php' && empty( $_GET ) ) { wp_safe_redirect( admin_url( 'customize.php' ) ); exit; } } );
自定义配置说明
- 跳转地址可按需替换:需要跳转到菜单管理页就将
customize.php替换为nav-menus.php,跳转到小工具管理页替换为widgets.php即可 - 若需要给最高权限管理员保留Themes选项访问权限,仅限制其他角色,可在两段功能逻辑的最开头添加权限判断:
// 管理员不触发限制逻辑 if ( current_user_can( 'update_core' ) ) { return; }
- 请勿将代码直接写入WordPress核心程序文件,否则版本更新后代码会被覆盖失效。
内容的提问来源于stack exchange,提问作者Vinith Almeida
相关产品推荐
相关产品推荐

