WordPress用户角色和权限使您能够控制其他用户可以或不能在您的网站上执行的操作。您可以使用它们来管理用户操作,例如撰写和编辑文章、创建新页面、审核评论、安装插件、添加新用户等等。
了解用户角色和权限对于管理任何WordPress网站都是必不可少的。例如,如果您正在为客户构建站点,您不希望他们编辑或更改已安装的主题。同样,让多作者博客的作者安装或删除插件也是不明智的。
学习如何巧妙地管理WordPress用户角色将帮助您简化工作流程、确保网站安全并获得对网站的最终控制权。
在这份详尽的指南中,您将了解WordPress用户角色、WordPress提供的各种权限、如何编辑现有用户角色、如何在多站点上管理用户,以及使用一组全新权限创建新角色。
- 什么是WordPress用户角色和权限?
- 六个默认的WordPress用户角色
- 如何有效管理WordPress用户角色
- 在WordPress多站点网络上管理用户
- 如何自定义现有的WordPress用户角色
- 如何在WordPress中创建自定义用户角色
- 如何从WordPress中删除用户角色
- 在WordPress中创建自定义权限
- 最好的WordPress用户角色和权限插件
什么是WordPress用户角色和权限?
角色和权限是WordPress中用户访问管理的基础。要了解WordPress中的用户角色,您首先需要知道什么是权限。
WordPress将用户可以采取的任何操作定义为Capability。以下是WordPress中可用权限的一些示例,以及它们在其代码中的引用方式:
- 阅读文章( read)
- 撰写和编辑文章( edit_posts )
- 发布文章( publish_posts )
- 安装插件 ( install_plugins )
- 删除主题 ( delete_themes )
- 创建用户(create_users)
- 适度评论 ( moderate_comments )
大多数权限从它们的名称就可以不言自明。WordPress的核心内置了70多种硬编码权限。
角色是您可以分配给用户的一系列能力。每个WordPress用户都需要分配一个角色。用户只能执行其角色授予他们的操作。
“角色”是“权限”的集合
在上图中,角色 1的任何用户都可以阅读文章,但不能编辑文章。具有角色 2的用户可以阅读和编辑文章,但他们不能发布文章。任何具有角色 3的用户都可以阅读、编辑和发布文章,但他们不能删除文章,这与可以删除文章的角色 4用户不同。
WordPress仪表盘中的“添加新用户”面板
WordPress使用其许多本机权限来定义其默认用户角色。例如,它授予管理员和编辑者权限publish_pages
,但不会将它们分配给订阅者和贡献者。
WordPress仪表盘中的“用户”面板
至少,每个WordPress用户都有一个用户名、密码、一个电子邮件地址和一个角色。
phpMyAdmin显示WP数据库存储权限的位置
WordPress将其所有基于角色的权限存储在其数据库中wp_user_roles
序列化选项下的wp_options
表中。WP_Roles
核心类用于定义如何在数据库中存储角色和权限。
WP_Roles类
WordPress使用User Roles API实现角色和权限,其中大部分基于WP_Roles核心类。wp-includes/class-wp-roles.php
您可以在文件中找到它的来源。
如果您查看数据库,您会发现角色位于一个已定义角色名称的数组中。rolename
键将用户角色名称存储为name
键的值,并将所有权限存储在单独的数组中作为capability
键的值。
‘rolename’ => array (
‘name’ => ‘rolename’,
‘capabilities’ => array()
)
)
array ( 'rolename' => array ( 'name' => 'rolename', 'capabilities' => array() ) )
WP_Roles类定义了很多方法。您可以在代码中的任何位置调用它们以与用户角色API进行交互。
注意: WordPress包含另一个名为WP_Role的核心类(注意单数“Role”)。它用于扩展用户角色API。
当你反序列化的wp_user_roles键值时,它看起来像这样:
‘administrator’ =>
array (
‘name’ => ‘Administrator’,
‘capabilities’ =>
array (
‘switch_themes’ => true,
‘edit_themes’ => true,
‘activate_plugins’ => true,
// […rest of the lines cut off for brevity…]
),
),
‘editor’ =>
array (
‘name’ => ‘Editor’,
‘capabilities’ =>
array (
‘moderate_comments’ => true,
‘manage_categories’ => true,
‘manage_links’ => true,
// […rest of the lines cut off for brevity…]
),
),
‘author’ =>
array (
‘name’ => ‘Author’,
‘capabilities’ =>
array (
‘upload_files’ => true,
‘edit_posts’ => true,
‘edit_published_posts’ => true,
// […rest of the lines cut off for brevity…]
),
),
‘contributor’ =>
array (
‘name’ => ‘Contributor’,
‘capabilities’ =>
array (
‘edit_posts’ => true,
‘read’ => true,
// […rest of the lines cut off for brevity…]
),
),
‘subscriber’ =>
array (
‘name’ => ‘Subscriber’,
‘capabilities’ =>
array (
‘read’ => true,
‘level_0’ => true,
),
),
)
array ( 'administrator' => array ( 'name' => 'Administrator', 'capabilities' => array ( 'switch_themes' => true, 'edit_themes' => true, 'activate_plugins' => true, // [...rest of the lines cut off for brevity...] ), ), 'editor' => array ( 'name' => 'Editor', 'capabilities' => array ( 'moderate_comments' => true, 'manage_categories' => true, 'manage_links' => true, // [...rest of the lines cut off for brevity...] ), ), 'author' => array ( 'name' => 'Author', 'capabilities' => array ( 'upload_files' => true, 'edit_posts' => true, 'edit_published_posts' => true, // [...rest of the lines cut off for brevity...] ), ), 'contributor' => array ( 'name' => 'Contributor', 'capabilities' => array ( 'edit_posts' => true, 'read' => true, // [...rest of the lines cut off for brevity...] ), ), 'subscriber' => array ( 'name' => 'Subscriber', 'capabilities' => array ( 'read' => true, 'level_0' => true, ), ), )
它是一个多维数组,每个角色都分配了一个角色名称并授予了一组权限。同样,WordPress将基于用户的权限存储在带有wp_capabilities
元键名称的wp_usermeta
表中。
注意:您的设置中的wp_
前缀可能不同。这取决于站点文件wp-config.php
中$table_prefix
全局变量的值。
角色与权限图表
WordPress Codex中的“角色与权限”图表
WordPress Codex包含一个简单的Capability vs Role Table,尽管它不是那么直观。它总结了默认用户角色在单站点和多站点WordPress设置中可以执行的所有操作。在一定数量的权限之后会有一个中断,以便您轻松区分高级和低级权限。
为了更好地一目了然地展示所有WordPress角色和权限,您可以查看Exygy提供的这张表格。
与Gutenberg可重用区块相关的权限
WordPress的Gutenberg区块编辑器引入了一个名为Reusable Blocks的惊人功能。它允许您将整个区块(或多个区块)保存为模板,并在您网站的其他任何地方使用它。
在WordPress的新Gutenberg区块编辑器中添加“可重用区块”
因此,WordPress还引入了以下与可重用区块相关的新权限:
- 创建可重用的区块
- 编辑可重用区块
- 读取可重用区块
- 删除可重用的区块
上面列出的权限与文章相关的权限类似。管理员或编辑者可以访问所有与可重用区块相关的权限,而作者只能编辑或删除由他们创建的可重用区块。贡献者只能读取可重用的区块。
特殊权限:未经过滤的上传
未经过滤的上传是一项特殊权限,默认情况下不分配给任何用户角色,包括管理员或超级管理员。它允许用户上传具有任何扩展名(例如 SVG 或 PSD)的文件,而不仅仅是那些被WordPress列入白名单的文件。
注意:您可以使用wp_get_mime_types() 函数获取WordPress支持的mime类型和文件扩展名列表。
要启用此权限,您需要将以下代码片段添加到您的wp-config.php
文件中。在要求您停止编辑的行之前定义常量。
define( 'ALLOW_UNFILTERED_UPLOADS', true );
定义此常量后,您可以为WordPress单站点上的任何用户角色安装未过滤上传权限。但是,在多站点安装中,只有超级管理员才能拥有此权限。
例如,如果您想将unfiltered_upload
权限分配给编辑器,您可以在WordPress代码中的任何位置添加以下代码(理想情况下,仅在主题或插件激活时运行它):
$role = get_role( ‘editor’ );
$role->add_cap( ‘unfiltered_upload’ );
?>
<?php $role = get_role( 'editor' ); $role->add_cap( 'unfiltered_upload' ); ?>
我们将在本文后面讨论如何添加或自定义所有用户角色或特定用户的权限。
原始权限与元权限
WordPress中主要有两种类型的权限:
- 原始权限:这些能力被授予特定角色。具有这些角色的用户会自动继承原始权限。
- 元权限:这些权限默认不授予任何角色。WordPress在其代码和数据库中检查某个对象,