🪐前言
你的 WordPress 后台被三个人同时用了——你、产品经理、外包编辑。某天上线前的凌晨,产品经理不小心把一个"已发布"页面改成了"草稿",外包编辑把产品 A 的图片误换成了产品 B 的图,而你发现的时候客户已经在等着验收了。
这不是谁的错。WordPress 默认角色粗放,一个人要么"什么都管不了"(订阅者)要么"什么都能改"(编辑)。多用户协作站的权限安全不是靠"大家小心一点"解决的,是靠角色设计解决的。
这篇文章会带你把 WordPress 的五种默认角色吃透,然后用 Members 插件建自定义角色,最后给出一套外贸站多用户场景的权限模板。代码不多、操作不复杂,重点在设计思路。
一、WordPress 五种默认角色:你的团队成员到底在后台能看到什么
很多人以为编辑(Editor)比作者(Author)"稍微高一点"。其实差距大了去了。下面这张表把每个角色能干什么说清楚。
| 能力 | 订阅者 | 投稿者 | 作者 | 编辑 | 管理员 |
|---|---|---|---|---|---|
| 读自己的文章 | 能 | 能 | 能 | 能 | 能 |
| 读别人的文章 | 不能 | 不能 | 不能 | 能 | 能 |
| 写文章 | 不能 | 能 | 能 | 能 | 能 |
| 发布自己的文章 | 不能 | 不能 | 能 | 能 | 能 |
| 发布/改别人的文章 | 不能 | 不能 | 不能 | 能 | 能 |
| 改页面 | 不能 | 不能 | 不能 | 能 | 能 |
| 改分类/标签 | 不能 | 不能 | 不能 | 能 | 能 |
| 上传媒体文件 | 不能 | 不能 | 能 | 能 | 能 |
| 审核评论 | 不能 | 不能 | 不能 | 能 | 能 |
| 装插件/换主题 | 不能 | 不能 | 不能 | 不能 | 能 |
| 增删用户 | 不能 | 不能 | 不能 | 不能 | 能 |
| 改设置/导出数据 | 不能 | 不能 | 不能 | 不能 | 能 |
🔑 这张表的核心信息:编辑 和 管理员 之间有一道墙 —— 服务器级和系统级的操作。 编辑能操作所有内容,但不能动主题/插件/用户/设置。这就是安全保护墙。

🧐 五种角色的正确用人
- 管理员:网站的技术负责人。只有你,或你信任的开发人员。不要给客户管理员帐号——他们真的会不小心卸载 WooCommerce。
- 编辑:内容负责人。能审核/发布/修改任何人的内容,但不能碰系统。适合内容团队主管。
- 作者:独立写作者。能写能发自己的文章,不能碰别人的。适合:成熟的内容写手、产品经理(加产品 CPT 权限后)。
- 投稿者:新手写手/临时供稿人。写了只能存草稿,需要编辑审核才能发布。适合:外包编辑、实习生、临时翻译。
- 订阅者:外贸站最常用的场景是会员区、客户门户、报价系统。只能读自己的个人资料,什么操作都做不了。
二、默认角色在外贸站上的三个致命缺陷
缺陷一:CPT 权限是空的。 WordPress 默认角色对自定义文章类型一无所知。你注册了 product CPT,但编辑可能连"产品库"菜单项都看不到。
缺陷二:编辑"什么都能改"但"谁也不能删"。 编辑能修改任何页面和文章,但如果你的"关于我们"页面是品牌门面,你希望除了管理员谁都不能改——默认角色做不到这个粒度。
缺陷三:跨用户隔离不够。 三个作者同时写产品描述,作者 A 能看到作者 B 的文章并修改/删除。如果其中一个是时不时出问题的外包编辑,这风险你承担不了。
这三个缺陷就是为什么外贸站需要自定义角色。
三、Members 插件:可视化管理角色与权限
Members 是一个免费插件,安装量 20万+、评分 4.6+。它的核心功能就一句话:用勾选框创建自定义角色、给已存在的角色加/减权限。
wp plugin install members --activate
🏗️ 第一步:创建"产品编辑"自定义角色
场景:你有一个专门负责产品库的员工。她需要能添加编辑产品、上传图片、管理产品分类——但严格不能碰博客文章、不能碰页面、更不能接近系统设置。
后台 > Users > Roles > Add New Role,输入:
- 角色名称:Product Manager
- 显示名称:产品编辑
- 勾选以下权限:
read—— 登录后台的基础权限edit_products—— 编辑产品 CPTedit_published_products—— 编辑已发布的产品delete_products—— 删除产品publish_products—— 发布产品edit_others_products—— 编辑别人的产品upload_files—— 上传图片/文件manage_product_category—— 管理产品分类
然后把需要的权限逐项勾上,不需要的一个都别勾。保存角色。
💡 如果你是用 CPT UI 插件注册的 CPT,Members 会自动检测到已注册的 CPT 并在权限列表中生成对应的
edit_*/delete_*/publish_*条目。如果用代码注册 CPT,需要在register_post_type()的capabilities参数中显式定义权限映射——这个我们后面会讲。
🔒 第二步:给内容编辑收缩权限
你的编辑现在能改所有页面。你想把"关于我们"页面锁死。在 Members 中:
后台 > Users > Roles,点击 Editor 角色旁边的"编辑"。
在权限列表中找到 edit_pages 和 delete_pages ——这两个你暂时留着。关键是你会配合另一个方案:单页面保护。可以手动在单页面编辑页把页面状态固定,或者用 "Advanced Access Manager"(AAM)插件做"仅特定角色可见/可编辑"的单内容粒度控制。
更简单粗暴的做法:把公司介绍、服务条款、隐私政策这几个永久页面直接从页面列表中移到一个独立 CPT 里(比如注册一个 legal_pages CPT),然后不给编辑这个 CPT 的权限。这样编辑永远碰不到这些页面。
📋 第三步:创建"外包翻译"角色
场景:公司有内容需要翻译成西班牙语和法语。外部翻译人员只能看到指定文章、只能存草稿、不能发布。
创建一个角色叫 "Translator":
readedit_posts—— 编辑文章- 不勾选
publish_posts—— 不能发布 - 不勾选
edit_others_posts—— 看不到别人的文章
然后在 Users 中创建翻译人员帐号。他们登录后只能看到自己被分配的文章(通过作者筛选),写完存草稿,由内容主管审核发布。

四、多用户协作站的完整权限模板(直接套用)
以下是一个典型 5-8 人外贸内容团队的权限方案模板:
| 岗位 | WordPress 角色 | 核心权限 | 被限制的权限 |
|---|---|---|---|
| 技术负责人 | 管理员 | 全部 | 无 |
| 运营总监 | 编辑(定制) | 内容全部、评论管理、分类管理 | 插件/主题/用户/设置 |
| 产品专员 | 产品编辑(自定义) | 产品 CPT 全权限、媒体上传 | 文章/页面/系统权限 |
| SEO 专员 | SEO 编辑(自定义) | 文章编辑、SEO 元数据、sitemap 权限 | 页面/产品/插件 |
| 内容写手 | 作者(定制) | 写文章、上传图片、发自己的文章 | 不能改别人的文章 |
| 外包翻译 | 投稿者 | 写文章(存草稿)、读自己的文章 | 不能发布、不能看别人的 |
| 客户 / 访客 | 订阅者 | 查看订单/报价/会员内容 | 无任何后台操作权限 |
🔥 这个模板的核心思想是"权限最小化原则":每个人只拿到完成他的工作必需的权限,多一个都别给。


五、用代码微调权限:三个最实用的 PHP 片段
Members 插件覆盖了 90% 的需求,但有些细节需要在 functions.php 里补刀。
🚫 让编辑看不到"外观"菜单
WordPress 默认编辑角色能看到"外观"菜单(虽然进不去自定义功能)。对不熟悉 WP 的运营人员来说,这个菜单就在那勾引他们点进去。
<?php
// 隐藏编辑角色的"外观"菜单
function hide_menu_for_editors() {
if ( current_user_can( 'editor' ) && ! current_user_can( 'administrator' ) ) {
remove_menu_page( 'themes.php' ); // 外观
remove_menu_page( 'plugins.php' ); // 插件
remove_menu_page( 'tools.php' ); // 工具
}
}
add_action( 'admin_menu', 'hide_menu_for_editors', 999 );
🔧 让"作者"只能看到自己的媒体文件
默认情况下,作者上传图片时,可以浏览和使用其他用户上传的所有媒体文件。如果你希望每个产品专员只看自己的图片池:
<?php
// 作者只能看到自己上传的附件
function restrict_media_to_author( $query ) {
$user = wp_get_current_user();
// 管理员不受限制
if ( in_array( 'administrator', (array) $user->roles ) ) {
return;
}
if ( current_user_can( 'author' ) || current_user_can( 'product_manager' ) ) {
$query->set( 'author', $user->ID );
}
}
add_action( 'pre_get_posts', 'restrict_media_to_author' );
📛 用代码显式注册 CPT 权限映射
如果你用纯代码注册 CPT,想让 Members 插件自动识别权限,需要在 register_post_type() 中定义 capabilities 参数:
<?php
$args = array(
// ... 其他参数 ...
'capability_type' => 'product',
'map_meta_cap' => true,
);
register_post_type( 'product', $args );
capability_type 设为 product 后,WordPress 会自动生成一组 edit_product / delete_product / publish_product 等原始权限。如果你需要更多的权限分离(例如"能编辑但不能删除"),就要用更细粒度的 capabilities 数组定义,不过大多数场景用上面的模式就够了。
六、权限最小化原则在实操中的四个具体体现
🔒 原则一:管理员帐户 ≤2 个
一个是你主帐号,一个是你信任的开发或合伙人。多余的管理员帐号 = 多余的攻击面。
🔒 原则二:给客户永远用"订阅者"或更低
客户不需要进入 /wp-admin/。如果客户需要看订单/报价/下载文件,用前端用户面板(WooCommerce 的 My Account 页面自带)或者前端仪表盘插件(WP Frontend Admin),别给他后台入口。
🔒 原则三:定期审计闲置用户
实际经验:三个月没登录的帐号如果密码也不复杂,就是安全隐患。在 Users 页面按"最后登录"排序(需要装插件 "WP Last Login" 或在 Members 设置中开启),把超过 90 天没活动的外包人员帐号冻结或删除。
🔒 原则四:不要在测试环境忽略权限
很多人测试站给所有人管理员权限、正式站再设细粒度角色。结果是上线时忘记降级,外包翻译和产品经理上线后挂着管理员跑了三个月。测试站和正式站的权限策略要一致。
七、常见故障排查
❌ 自定义角色看不到 CPT 菜单
检查 CPT 注册代码中 show_in_menu 是否为 true,以及 capability_type 参数是否设置了正确的映射值。Members 插件依赖 WordPress 原生的权限命名约定来生成勾选框列表。
❌ 限制了某用户权限后,对方说"进不去后台"
检查是否保留了 read 权限。read 是所有后台操作的基础权限——没有它,用户登录后直接白屏或跳回登录页。
❌ 用代码去掉了菜单项,但用户知道 URL 还能直接访问
remove_menu_page() 只隐藏菜单,不阻止直接访问 URL。要真正阻止访问,需要加 admin_init 钩子做页面级拦截:
<?php
function block_editor_pages() {
$screen = get_current_screen();
$blocked = array( 'themes.php', 'plugins.php' );
if ( current_user_can( 'editor' )
&& ! current_user_can( 'administrator' )
&& in_array( $screen->id, $blocked ) ) {
wp_die( '你没有权限访问此页面。如有需要请联系管理员。' );
}
}
add_action( 'current_screen', 'block_editor_pages' );
总结
用户角色和权限管理不是一次设好就忘的配置项,而是多用户协作站的治安体系。
- 五种默认角色各有边界,编辑和管理员之间的那条线是安全保护墙,别跨
- Members 插件用勾选框创建自定义角色,产品编辑、SEO 专员、外包翻译各领各的权限
- 权限最小化原则:每个人只拿到完成工作必需的最小权限集
- 一个 5-8 人的外贸内容团队,按本文模板分配角色,管理成本几乎为零
如有问题,官方求助路径:
- Members 插件官方文档
- WordPress 角色与权限官方文档
- AAM (Advanced Access Manager) 插件 —— 更细粒度控制方案
- WordPress CPT 权限映射文档
WordPress 独立站学院 · 技术教程 #34
分类:内容与数据 · 用户角色 / 权限管理 / 安全协作



外包账号给太大权限真的吓人
那个read权限漏勾过一次,直接进不去后台,排查半天
产品CPT那块想问下,用ACF建的字段权限也能一起控吗
客户要后台账号我一般都拒绝,太容易乱点了
把固定页面挪到单独CPT这招有点狠,但挺省心
remove_menu_page只藏菜单这个坑,之前差点以为安全了
小白问一句,Members和AAM一起用会不会权限打架?
管理员最多两个这个我赞成,多一个都睡不踏实
产品经理把页面改草稿那段太真实了,血压上来了