基于用户角色隐藏WordPress后台菜单的技术实现需求
WordPress 按角色自定义后台菜单可见性方案
一、纯代码实现(无需插件)
1. 默认限制非管理员菜单可见性
在主题的functions.php文件或自定义插件中添加以下代码,默认隐藏非管理员的冗余菜单,仅保留必要项(可根据需求调整移除的菜单):
function custom_restrict_non_admin_menus() { // 仅对非管理员生效 if (!current_user_can('administrator')) { // 示例:移除外观、插件、工具、设置等菜单 remove_menu_page('themes.php'); remove_menu_page('plugins.php'); remove_menu_page('tools.php'); remove_menu_page('options-general.php'); // 如需移除更多菜单,添加对应slug的remove_menu_page调用即可 } } add_action('admin_menu', 'custom_restrict_non_admin_menus');
2. 管理员可视化配置角色菜单权限
如果需要管理员灵活配置各角色的隐藏菜单,可添加后台配置页面,实现可视化管理:
// 添加菜单权限配置页面 function custom_menu_permissions_admin_page() { add_options_page( '菜单权限配置', '菜单权限', 'manage_options', 'menu-permissions-settings', 'custom_menu_permissions_render_page' ); } add_action('admin_menu', 'custom_menu_permissions_admin_page'); // 渲染配置页面 function custom_menu_permissions_render_page() { if (!current_user_can('manage_options')) wp_die('无权限访问'); // 保存配置逻辑 if (isset($_POST['save_menu_permissions'])) { check_admin_referer('menu_permissions_nonce'); $permissions = []; foreach ($_POST['hidden_menus'] as $role => $menus) { $permissions[$role] = array_filter($menus); } update_option('custom_role_menu_permissions', $permissions); echo '<div class="updated"><p>配置已保存</p></div>'; } $saved_perms = get_option('custom_role_menu_permissions', []); $roles = wp_roles()->roles; // 定义所有可配置的后台菜单 $available_menus = [ 'index.php' => '仪表盘', 'edit.php' => '文章', 'upload.php' => '媒体', 'edit.php?post_type=page' => '页面', 'themes.php' => '外观', 'plugins.php' => '插件', 'users.php' => '用户', 'tools.php' => '工具', 'options-general.php' => '设置' ]; ?> <div class="wrap"> <h1>菜单权限配置</h1> <form method="post"> <?php wp_nonce_field('menu_permissions_nonce'); ?> <?php foreach ($roles as $slug => $role) : ?> <?php if ($slug !== 'administrator') : ?> <h3><?php echo $role['name']; ?></h3> <table class="form-table"> <tr> <td> <?php foreach ($available_menus as $menu_slug => $menu_name) : ?> <label> <input type="checkbox" name="hidden_menus[<?php echo $slug; ?>][<?php echo $menu_slug; ?>]" <?php checked(in_array($menu_slug, $saved_perms[$slug] ?? [])); ?> > 隐藏「<?php echo $menu_name; ?>」 </label><br> <?php endforeach; ?> </td> </tr> </table> <?php endif; ?> <?php endforeach; ?> <p class="submit"> <input type="submit" name="save_menu_permissions" class="button-primary" value="保存配置"> </p> </form> </div> <?php } // 应用菜单权限配置 function custom_apply_menu_permissions() { if (current_user_can('administrator')) return; $user = wp_get_current_user(); $saved_perms = get_option('custom_role_menu_permissions', []); foreach ($user->roles as $role) { $hidden_menus = $saved_perms[$role] ?? []; foreach ($hidden_menus as $slug) { remove_menu_page($slug); } } } add_action('admin_menu', 'custom_apply_menu_permissions', 999); // 高优先级确保覆盖默认菜单
这段代码会在后台「设置」菜单下新增「菜单权限」页面,管理员可勾选各非管理员角色需要隐藏的菜单,保存后自动生效。
二、插件实现(适合无代码基础的新手)
不想写代码的话,可使用User Role Editor插件:
- 安装后进入「用户」→「用户角色编辑器」
- 选择目标角色,切换到「菜单」选项卡,勾选需要隐藏的菜单即可
- 管理员默认拥有全权限,无需额外调整
内容的提问来源于stack exchange,提问作者kadro larino
相关产品推荐
相关产品推荐

