EP087. “自定义用户角色:Members 插件与自定义文章类型权限”
🔒 登录后可标记已读WordPress 默认自带 5 种角色(Subscriber / Contributor / Author / Editor / Administrator),权限逐级递增,但没法只让某个人管理某一种自定义文章类型(比如只管 Event,不能碰 Program)。这一讲装 Members 插件(MemberPress 出品的免费角色权限插件)新建自定义角色,并配合修改 mu-plugins/university-post-types.php,把 Event、Campus 这两个自定义文章类型的权限从「默认继承 Post 的权限」改成「拥有自己独立的权限」,这样才能在 Members 插件里单独对它们授权。最后演示了给同一个用户账号叠加多个角色(Event Planner + Campus Manager)。
涉及文件
wp-content/mu-plugins/university-post-types.php(修改)- 后台安装 Members 插件,新建角色
Event Planner、Campus Manager(插件界面操作,无对应代码文件)
代码实现
mu-plugins/university-post-types.php:给 Campus 和 Event 两个文章类型的注册参数加上独立权限:
// wp-content/mu-plugins/university-post-types.php
// campus 文章类型注册参数里新增:
'capability_type' => 'campus',
'map_meta_cap' => true,
// event 文章类型注册参数里新增:
'capability_type' => 'event',
'map_meta_cap' => true,
关键改动点:
- 自定义文章类型如果不设置
capability_type,WordPress 默认会让它沿用post(博客文章)的权限体系——意味着只要某个角色有权限管理博客文章,也会自动获得管理这个自定义文章类型的权限,这在后台角色管理界面里也不会单独出现对应的权限勾选栏 capability_type设成一个独一无二的字符串(这里跟文章类型同名,方便理解,但实际上取什么名字都行,只要唯一)之后,WordPress 才会为这个文章类型生成一套独立的权限集合,Members 插件的角色编辑界面才会出现对应的权限勾选 Tabmap_meta_cap => true是让 WordPress 自动按标准逻辑(创建/编辑自己的/编辑他人的/删除等)把这些新权限映射、套用到实际操作上,不用自己写判断逻辑去手动检查权限- Members 插件后台路径是「Members → Roles」(不是 Users 菜单下面),新建角色时给它起名(如
Event Planner),会看到新出现的Events权限 Tab,勾选需要的权限(创建/编辑他人/删除等)保存即可 - 一个用户账号可以同时勾选多个角色(比如
Editor+Event Planner+Campus Manager),Members 插件支持这种多角色叠加,是原生 WordPress 后台做不到的
[截图:wp-admin 后台 Members 插件的 Roles 设置页面,新建 Event Planner 角色并勾选 Events 权限 Tab]
Hook / Function 速查
| 名称 | 类型 | 用途 |
|---|---|---|
capability_type(register_post_type 参数) | WP 内建注册参数 | 让自定义文章类型拥有独立于 post 的权限体系 |
map_meta_cap(register_post_type 参数) | WP 内建注册参数 | 让 WordPress 自动把「创建/编辑/删除」这类通用权限映射到具体操作上,不用手写权限判断逻辑 |
常见坑
- 给自定义文章类型加了
capability_type之后,忘记回头给 Administrator 角色也补上对应权限——capability_type一旦设置,包括管理员在内的所有角色都不再自动拥有这个文章类型的权限,必须去 Members 插件里给 Administrator 角色也手动勾选一遍,不然连管理员自己都会突然看不到这个文章类型的管理菜单 - Members 插件历史上改过名字,旧版教程/文档里提到「从 Users 菜单进入角色设置」的说法已经过时,现在固定是从左侧 Members 菜单进入
延伸 / 后续讲座会用到
下一讲会做「开放注册」,让访客可以自己注册成默认权限最低的 Subscriber 账号;再往后几讲会逐步给 Subscriber 开放笔记(My Notes)、点赞教授等有限的功能。
Sources
Udemy:
- Become a WordPress Developer: Unlocking Power With Code — Section 18, EP087