WordPress 默认自带了管理员(Administrator)、编辑(Editor)、作者(Author)、投稿者(Contributor)、订阅者(Subscriber)这五种角色。如果仅仅是用来做一个资讯发布类型的网站,这套角色体系是完全够用的。
但是,由于 WordPress 强大的扩展性,我们经常会用它来搭建各种非博客类的 Web 应用。在这些应用里,默认的角色权限可能够用了,但是前台暴露给用户看到的“角色名称”却显得很不专业。
为什么我们需要修改角色名称?
考虑以下两个常见的开发场景:
- 场景 A(企业内部 OA 或任务管理):我们需要用到管理员、部门主管、普通职员等称呼。如果你在系统里管某个部门主管叫“编辑(Editor)”,管普通职员叫“投稿者(Contributor)”,用户看到后肯定会觉得非常别扭。
- 场景 B(客户交付):你帮甲方公司做了一个企业官网。甲方老板的账号,如果你直接给他叫“Administrator”,可能显得有些生硬;如果给甲方的内容运营只开“Editor”,有时候你又希望这个角色的名字叫做“新媒体总监”。
在这些情况下,如果仅仅是为了改一个显示的“称呼”,而去用 add_role 从零去创建新角色、甚至引入厚重的权限管理插件,纯属小题大做,也会平白为系统增加后期维护的复杂性。
最优雅的做法是:权限底层照旧,只修改角色的 UI 显示名称。
代码实现:动态修改角色名称数组
WordPress 将所有的角色信息都存放在一个全局的 WP_Roles 实例中。我们只需要在加载时,用钩子动态覆盖这个对象的名称属性即可。
以下示例代码演示了如何将默认的“投稿者(contributor)”改为“普通组员(Member)”,以及将“管理员(administrator)”改为“系统超管(SysAdmin)”:
function wpzhiku_change_role_names() {
// 获取包含所有角色的全局变量
global $wp_roles;
// 确保角色对象已被实例化
if ( ! isset( $wp_roles ) ) {
$wp_roles = new WP_Roles();
}
// --- 修改案例 1:投稿者 -> 普通组员 ---
// 修改角色列表数组中的显示名称
$wp_roles->roles['contributor']['name'] = '普通组员';
// 同时必须修改名称对照数组,否则有些地方(如用户列表)还是会显示原名
$wp_roles->role_names['contributor'] = '普通组员';
// --- 修改案例 2:管理员 -> 系统超管 ---
$wp_roles->roles['administrator']['name'] = '系统超管';
$wp_roles->role_names['administrator'] = '系统超管';
}
// 挂载到 init 钩子,因为这属于动态改变内存中的数组属性,不需要写入数据库,
// 这样即使用户停用了这段代码或主题,系统角色名称依然能无缝恢复原样。
add_action( 'init', 'wpzhiku_change_role_names' );
把以上代码放入当前激活主题的 functions.php 或您的功能插件中。保存后去 WordPress 后台查看“用户 -> 添加用户”界面,或者查看用户列表,你会发现相关的角色标签已经发生了改变,而底层的权限逻辑完全不受影响。


