如何隐藏并禁用WordPress后台管理菜单项及禁止URL直接访问
WordPress指定管理员账号后台菜单隐藏+访问拦截实现方法
仅调用remove_menu_page只会删除后台左侧菜单入口,不会拦截直接通过URL输入的访问请求,需要额外挂载admin_init钩子做请求校验拦截,完整实现代码如下:
// 隐藏指定用户的后台菜单 function custom_hide_restricted_menus() { $user = wp_get_current_user(); if($user && isset($user->user_login) && 'admin2' === $user->user_login) { remove_menu_page( 'plugins.php' ); // 插件菜单 remove_menu_page( 'tools.php' ); // 工具菜单 remove_menu_page( 'users.php' ); // 用户菜单 } } add_action('admin_menu', 'custom_hide_restricted_menus'); // 拦截指定用户的受限页面直接访问请求 function custom_restrict_admin_page_access() { // 非后台请求、非目标用户直接跳过校验 $user = wp_get_current_user(); if(!is_admin() || !$user || !isset($user->user_login) || 'admin2' !== $user->user_login) { return; } // 定义禁止访问的页面列表 $restricted_pages = [ 'plugins.php', 'tools.php', 'users.php' ]; // 获取当前访问的后台页面文件名 $current_page = basename($_SERVER['PHP_SELF']); // 匹配到受限页面跳转至后台首页,也可替换为wp_die输出权限不足提示 if(in_array($current_page, $restricted_pages)) { wp_redirect(admin_url()); exit; } } add_action('admin_init', 'custom_restrict_admin_page_access');
代码说明
- 菜单隐藏逻辑从原来的
admin_head钩子改为admin_menu,是WordPress官方推荐的后台菜单修改钩子,执行时机更合理,不会出现菜单闪显的问题 admin_init是后台页面初始化前触发的钩子,在页面内容输出前做访问拦截性能最优,不会有多余的页面渲染开销- 如果需要给用户显示权限不足提示,可以把
wp_redirect(admin_url());替换为wp_die('你没有权限访问该页面,请联系超级管理员。'); - 如果后续需要新增其他限制页面,直接在
$restricted_pages数组里添加对应后台页面的文件名即可
内容的提问来源于stack exchange,提问作者slydog
相关产品推荐
相关产品推荐

