WordPress 后台菜单权限控制钩子|仅保留指定的后台菜单项,其余全部隐藏
› VFX大学 › wordpress开发 › WordPress 后台菜单权限控制钩子|仅保留指定的后台菜单项,其余全部隐藏
- This topic has 0 个回复, 1 个参与人, and was last updated 22 小时, 18 分 前 by
追光.
正在查看 0 条回复
- 作者帖子
- 2025年7月10日 - 下午9:45 #405
追光管理员这段代码是一个 WordPress 后台菜单权限控制钩子,其作用是:
🚫 在特定子站点中,仅保留指定的后台菜单项,其余全部隐藏。
用于多站点(Multisite)系统中对子站点后台的精细化控制,例如用于知识库、前台编辑等特殊站点,防止非管理员用户访问无关页面,保持界面简洁可控。
✅ 代码完整讲解与用途说明
add_action('admin_menu', function () { // ✅ 仅在子站 ID 为 4 时生效,防止主站或其他子站被影响 if (get_current_blog_id() != 4) return; // ✅ 如果希望管理员不受限制,可取消注释下面这行 // if (current_user_can('manage_options')) return; global $menu; // ✅ 允许保留的菜单 slug 列表,其他全部隐藏 $allowed_menus = [ 'edit.php?post_type=isa_docs', // 📘 自定义文档系统(isa_docs) 'plugins.php', // 🔌 插件管理 'options-general.php', // ⚙️ 设置菜单 'tools.php', // 🛠 工具菜单 'users.php', // 👤 用户管理 // 'edit.php?post_type=page', // ❌(可选)页面编辑功能,如不需要可注释 'seo', // 🔍 SEO插件,例如 Yoast、Rank Math // 下面几项也可以开启: // 'customize.php', // 🎨 自定义外观(仅支持前台可视化主题) // 'widgets.php', // 🔧 小工具 // 'nav-menus.php', // 🍱 菜单编辑器 ]; // 遍历所有菜单项,如果不在允许列表中,则移除 foreach ($menu as $key => $item) { $slug = $item[2]; // 菜单的 slug 值 if (!in_array($slug, $allowed_menus)) { remove_menu_page($slug); // ❌ 移除不在白名单的菜单项 } } }, 999); // 使用高优先级确保在菜单加载完成后再执行
📌 应用场景扩展
这个方案非常适合于以下类型的 WordPress 项目或子站配置:
项目类型
功能定位
用途说明
🧾 知识库/文档站(如 isa_docs)
只需访问文档和工具
用户专注撰写文档,禁用外观、页面等干扰菜单
🛍 订单管理子站
仅开放用户与插件管理
管理员分权限维护不同功能子系统
📚 教程/在线课程平台
禁止修改主题、页面
保证前端UI一致性,避免非技术人员误操作
🧪 测试子站
控制测试环境权限
避免开发者在测试子站误操作主站内容
🧠 进阶建议
1. 按用户角色进一步控制
例如你可以为 editor 角色显示一组菜单,为 subscriber 显示更少项:
if (!current_user_can('editor')) { $allowed_menus = [...]; // 更少的权限菜单 }
2. 结合
remove_submenu_page()
控制子菜单
如果还需要细化子菜单(如设置里的某些子项),可以这样加:
remove_submenu_page('options-general.php', 'reading.php'); // 禁用“阅读设置”
3. 搭配
admin_head
进一步隐藏界面元素
可以配合 admin_head 用 JS/CSS 彻底隐藏按钮、面板等 UI 控件,达到更极致的“只留需要功能”的体验。
✅ 总结
这段代码是一种精准控制后台权限的高级技巧,适合:
多站点部署
高度定制后台管理界面
控制子站功能范围,提升安全性与用户专注度
也可以将其封装为可配置模块,方便其他子站继承并应用。适用于 functions.php 或自定义功能插件中。
- 作者帖子
正在查看 0 条回复
- 在下方一键注册,登录后就可以回复啦。