WordPress用户角色和权限的终极指南

WordPress用户角色权限使您能够控制其他用户可以或不能在您的网站上执行的操作。您可以使用它们来管理用户操作,例如撰写和编辑文章、创建新页面、审核评论、安装插件、添加新用户等等。

了解用户角色和权限对于管理任何WordPress网站都是必不可少的。例如,如果您正在为客户构建站点,您不希望他们编辑或更改已安装的主题。同样,让多作者博客的作者安装或删除插件也是不明智的。

学习如何巧妙地管理WordPress用户角色将帮助您简化工作流程、确保网站安全并获得对网站的最终控制权。

在这份详尽的指南中,您将了解WordPress用户角色、WordPress提供的各种权限、如何编辑现有用户角色、如何在多站点上管理用户,以及使用一组全新权限创建新角色。

  1. 什么是WordPress用户角色和权限?
  2. 六个默认的WordPress用户角色
  3. 如何有效管理WordPress用户角色
  4. 在WordPress多站点网络上管理用户
  5. 如何自定义现有的WordPress用户角色
  6. 如何在WordPress中创建自定义用户角色
  7. 如何从WordPress中删除用户角色
  8. 在WordPress中创建自定义权限
  9. 最好的WordPress用户角色和权限插件

什么是WordPress用户角色和权限?

角色和权限是WordPress中用户访问管理的基础。要了解WordPress中的用户角色,您首先需要知道什么是权限。

WordPress将用户可以采取的任何操作定义为Capability。以下是WordPress中可用权限的一些示例,以及它们在其代码中的引用方式:

大多数权限从它们的名称就可以不言自明。WordPress的核心内置了70多种硬编码权限。

角色是您可以分配给用户的一系列能力。每个WordPress用户都需要分配一个角色。用户只能执行其角色授予他们的操作。

“角色”是“权限”的集合

“角色”是“权限”的集合

在上图中,角色 1的任何用户都可以阅读文章,但不能编辑文章。具有角色 2的用户可以阅读和编辑文章,但他们不能发布文章。任何具有角色 3的用户都可以阅读、编辑和发布文章,但他们不能删除文章,这与可以删除文章的角色 4用户不同。

WordPress仪表盘中的“添加新用户”面板

WordPress仪表盘中的“添加新用户”面板

WordPress使用其许多本机权限来定义其默认用户角色。例如,它授予管理员和编辑者权限publish_pages,但不会将它们分配给订阅者和贡献者。

WordPress仪表盘中的“用户”面板

WordPress仪表盘中的“用户”面板

至少,每个WordPress用户都有一个用户名、密码、一个电子邮件地址和一个角色。

phpMyAdmin显示WP数据库存储权限的位置

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键的值。

array (
'rolename' => array (
'name' => 'rolename',
'capabilities' => array()
)
)

WP_Roles类定义了很多方法。您可以在代码中的任何位置调用它们以与用户角色API进行交互。

注意: WordPress包含另一个名为WP_Role的核心类(注意单数“Role”)。它用于扩展用户角色API。

当你反序列化的wp_user_roles键值时,它看起来像这样:

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中的“角色与权限”图表

WordPress Codex包含一个简单的Capability vs Role Table,尽管它不是那么直观。它总结了默认用户角色在单站点和多站点WordPress设置中可以执行的所有操作。在一定数量的权限之后会有一个中断,以便您轻松区分高级和低级权限。

为了更好地一目了然地展示所有WordPress角色和权限,您可以查看Exygy提供的这张表格

WordPress的Gutenberg区块编辑器引入了一个名为Reusable Blocks的惊人功能。它允许您将整个区块(或多个区块)保存为模板,并在您网站的其他任何地方使用它。

在WordPress的新Gutenberg区块编辑器中添加“可重用区块”

在WordPress的新Gutenberg区块编辑器中添加“可重用区块”

因此,WordPress还引入了以下与可重用区块相关的新权限:

  • 创建可重用的区块
  • 编辑可重用区块
  • 读取可重用区块
  • 删除可重用的区块

上面列出的权限与文章相关的权限类似。管理员或编辑者可以访问所有与可重用区块相关的权限,而作者只能编辑或删除由他们创建的可重用区块。贡献者只能读取可重用的区块。

特殊权限:未经过滤的上传

未经过滤的上传是一项特殊权限,默认情况下不分配给任何用户角色,包括管理员或超级管理员。它允许用户上传具有任何扩展名(例如 SVG 或 PSD)的文件,而不仅仅是那些被WordPress列入白名单的文件。

注意:您可以使用wp_get_mime_types() 函数获取WordPress支持的mime类型和文件扩展名列表。

要启用此权限,您需要将以下代码片段添加到您的wp-config.php文件中。在要求您停止编辑的行之前定义常量。

define( 'ALLOW_UNFILTERED_UPLOADS', true );

定义此常量后,您可以为WordPress单站点上的任何用户角色安装未过滤上传权限。但是,在多站点安装中,只有超级管理员才能拥有此权限。

例如,如果您想将unfiltered_upload权限分配给编辑器,您可以在WordPress代码中的任何位置添加以下代码(理想情况下,仅在主题或插件激活时运行它):

<?php
$role = get_role( 'editor' );
$role->add_cap( 'unfiltered_upload' );
?>

我们将在本文后面讨论如何添加或自定义所有用户角色或特定用户的权限。

原始权限与元权限

WordPress中主要有两种类型的权限:

  • 原始权限:这些能力被授予特定角色。具有这些角色的用户会自动继承原始权限。
  • 元权限:这些权限默认不授予任何角色。WordPress在其代码和数据库中检查某个对象,例如文章、页面、用户或任何分类法,如果逻辑检查成功,它会将元权限“映射”到一个或多个原始权限。

例如,WordPress授予作者自己文章的edit_posts权限,以便他们能够编辑它们。但是,此权限不允许他们编辑其他用户的文章。这就是元权限提供帮助的地方。

WordPress使用map_meta_cap()函数返回绑定到特定对象的原始权限数组。然后它将它们与用户对象进行比较,以检查用户是否可以编辑文章。

其他一些元权限示例是read_postdelete_postremove_userread_post。我们将在下面的自定义权限部分中更深入地了解它们。

六个默认的WordPress用户角色

WordPress包括六个预定义的用户角色。WordPress安装的第一个用户默认获得管理员角色(或WordPress多站点安装的超级管理员角色)。

由于WordPress在发展成为成熟的CMS之前最初是一个博客平台,因此它定义了大部分用户角色以在网络上发布内容。它的其他预定义用户角色是EditorAuthorContributorSubscriber

默认的WordPress用户角色按功能顺序堆叠

默认的WordPress用户角色按功能顺序堆叠

将默认的WordPress用户角色想象为代表各种权限的堆叠圆柱体的集合。最大的圆柱体的能力最多,第二大的圆柱体的能力次之,最小的圆柱体的能力最少。

你不应该认为一个角色优于另一个角色。相反,将角色视为在站点内设置用户的职责。

用户角色永远不会优越,也不会低劣,它准确地定义了它的意图。

现在让我们详细了解所有预定义的WordPress用户角色。

Administrator(管理员)

WordPress中的“Administrator”角色仪表盘

WordPress中的“Administrator”角色仪表盘

WordPress为任何单站点安装的第一个用户分配管理员角色。它位于所有其他用户角色的顶部,可以访问WordPress定义的所有权限。具有管理员角色的用户可以执行以下操作:

  • 创建和删除用户。
  • 重置密码
  • 安装和管理插件和主题
  • 编辑插件、主题、文件和代码

只有管​​理员可以在WordPress中添加新用户

只有管​​理员可以在WordPress中添加新用户

由于管理员是最强大的角色,因此您应该只将其分配给您信任的人。理想情况下,每个站点应该只有一名管理员。

WordPress多站点网络中的管理员角色的定义略有不同,但名称相同。在多站点网络中,管理员角色不享有在WP单站点中具有的某些权限,例如安装主题和插件。WordPress为超级管理员角色保留了这些权限。

Editor(编辑)

WordPress中的“编辑”角色仪表盘

WordPress中的“编辑”角色仪表盘

编辑器负责管理WordPress网站上的内容。他们可以创建、修改、发布或删除文章和页面,甚至是其他用户创建的文章和页面。他们的一些能力包括:

  • 删除已发布的文章和页面
  • 适度的评论
  • 管理链接和类别
  • 编辑其他用户的文章和页面

编辑者不能采取站点管理操作,例如安装插件和主题。他们的主要职责是监督其他作者和贡献者的工作,或者是一个人的内容团队。

提示:如果您自己管理WordPress网站,您可以为自己创建一个具有编辑角色的备用用户。这样,您就可以将您的管理和发布职责分开。即使您的编辑帐户遭到入侵,您的管理员帐户也不会受到黑客攻击。

Author(作者)

WordPress中的“作者”角色仪表盘

WordPress中的“作者”角色仪表盘

顾名思义,任何具有Author角色的用户都可以创建、编辑和发布文章。他们还可以上传媒体文件和删除自己的文章,但不能创建页面或编辑其他任何人的文章。

作者可以为他们的文章添加标签并将他们的文章分配给现有的类别,但他们不能创建新的类别。与编辑一样,他们无权访问任何管理职责,例如设置、插件和主题。

注意:作者即使在发布后也可以删除他们的文章。如果您要为任何人分配作者的角色,请确保您可以完全控制他们的文章,包括删除它们。

Contributor(贡献者)

WordPress中的“贡献者”角色仪表盘

WordPress中的“贡献者”角色仪表盘

贡献者角色是作者角色的精简版。具有贡献者角色的用户可以创建自己的文章、删除文章的草稿,但不能发布文章。

他们可以保存文章的草稿或将其发送给编辑或管理员进行审查和发布。一旦他们发布了文章,贡献者就无法删除他们的文章。相反,作者可以删除他们发布的文章。

贡献者角色非常适合新作者和来宾贡献者。

Subscriber(订阅者)

WordPress中的“订阅者”角色仪表盘

WordPress中的“订阅者”角色仪表盘

订阅者角色位于权限排名的最低级别。具有订阅者角色的用户可以管理他们的个人资料并有权阅读网站上的所有文章。差不多就是这样!

您可以将内容限制为仅登录用户,包括订阅者

您可以将内容限制为仅登录用户,包括订阅者

通常,每个人都有权阅读WordPress网站上的内容。但是,在订阅或会员网站中,只有登录用户才能查看内容。具有订阅者角色的用户可以阅读这些实例中的文章。

Super Admin(超级管理员)

WordPress多站点网络中的“超级管理员”角色仪表盘

WordPress多站点网络中的“超级管理员”角色仪表盘

超级管理员角色仅在WordPress多站点安装中可用。此角色取代多站点网络中的单站点管理员,并授予对所有高级管理权限的访问权限。

一些可供超级管理员使用的仅限多站点的权限包括:

  • 创建、管理和删除网络站点
  • 管理网络用户、插件、主题和选项
  • 升级多站点网络上的所有站点
  • 设置多站点网络
  • 将管理员分配给网络的各个站点

WordPress多站点网络中的“站点”面板

WordPress多站点网络中的“站点”面板

超级管理员仪表盘中的“主题”面板

超级管理员仪表盘中的“主题”面板

在多站点网络中,只有超级管理员可以安装主题并在整个网络中启用它们。个别网站的管理员只能查看和激活已由超级管理员安装的主题。

例如,我在我的网络上安装了免费的Astra主题,但我没有为网络启用它。因此,网络中各个子站点的管理员无法在他们的主题面板下看到它。

网络子站点管理员无法安装新主题

网络子站点管理员无法安装新主题

在上面的屏幕截图中,您还可以注意到网络中的站点管理员无法访问“插件”菜单与主题不同,超级管理员可以更改网络设置以使管理员能够在其站点上安装和激活插件。

超级管理员可以赋予管理员管理插件的能力

超级管理员可以赋予管理员管理插件的能力

超级管理员还可以“网络激活”插件

超级管理员还可以“网络激活”插件

超级管理员还可以网络激活插件,以确保它们被强制用于网络上的所有站点。站点管理员无法停用网络激活插件。此设置非常适合在整个网络中强制执行基本插件。

网络管理员屏幕

网络管理员仪表板充当超级管理员管理WordPress Multisite网络功能的中心枢纽。只有在创建网络后具有超级管理员角色的用户才能访问它。

网络管理员仪表盘包括管理网络的独特选项

网络管理员仪表盘包括管理网络的独特选项

1. 仪表板

Network Admin Dashboard是有关您的网络站点的详细信息的中心枢纽。它使您可以访问所有网络设置。

2. 网站

网络管理仪表盘中的“站点”面板

网络管理仪表盘中的“站点”面板

您可以使用站点面板来管理属于多站点网络的各个站点。此处列出的站点将是子目录或子域,具体取决于您配置WordPress多站点网络的方式。

从这里,您可以向网络添加新站点或从网络中删除现有站点。

您还可以从此处访问有关站点、用户、主题和整体网络设置的信息。您创建的第一个站点是网络中的主站点。网络从第一个站点的选项继承其所有设置。

将新站点添加到WordPress多站点网络

将新站点添加到WordPress多站点网络

单击添加新站点链接或按钮将带您到上面的屏幕,您可以在其中将新站点添加到您的多站点网络。如果您不打算让其他人成为新站点的管理员,您也可以将自己指定为管理员。

3. 用户

网络管理仪表盘中的“用户”面板

网络管理仪表盘中的“用户”面板

网络管理仪表板中的用户屏幕允许您管理用户并将新用户添加到您的多站点网络。只有超级管理员可以将用户添加到网络,但超级管理员可以修改网络设置以使站点管理员能够将新用户添加到他们自己的站点。

4. 主题

网络管理仪表盘中的“主题”面板

网络管理仪表盘中的“主题”面板

主题屏幕可让您管理站点管理员可访问的主题。它不允许您激活或停用任何网站正在使用的主题,而只能设置任何网站可以使用的主题。

如果您禁用网络上任何地方都在使用的主题,即使您禁用它,它也会在该站点上保持活动状态。但如果站点使用另一个主题,则禁用的主题不会出现在网络站点的主题面板中。

5. 插件

网络管理仪表盘中的“插件”面板

网络管理仪表盘中的“插件”面板

插件屏幕允许用户添加或删除网络中的插件。添加后,您可以从站点的仪表板激活插件。您还可以从此处网络激活插件,以强制在网络中的所有站点上使用插件。

默认情况下,站点管理员无法访问其仪表板中的插件菜单。超级管理员可以通过修改网络设置为他们启用此功能。

为所有子站点管理员启用插件管理

为所有子站点管理员启用插件管理

注意:并非所有WordPress插件都支持多站点网络。您需要阅读插件的文档以确认它们是否适用于多站点设置。

6.设置

网络管理仪表盘中的“网络设置”面板

网络管理仪表盘中的“网络设置”面板

您可以在网络设置屏幕上设置和更改整个网络的设置。网络的默认设置基于您在设置网络时创建的第一个站点。您可以在此处更改的一些网络设置是:

  • 操作设置
  • 注册设置
  • 新站点设置
  • 上传设置
  • 语言设定
  • 菜单设置

在这里,您还可以访问创建网络时使用的网络设置信息。您可以参考WordPress Codex中的网络管理员设置屏幕,详细了解所有可用设置选项。

7. 更新

网络管理仪表盘中的“更新”面板

网络管理仪表盘中的“更新”面板

您可以从更新屏幕控制网络和单个站点的更新过程。更新面板将显示可用于WordPress核心、主题和插件的任何更新。安装最新版本的WordPress后,您可以通过升级网络屏幕将其应用到网络上的所有站点。

网络管理仪表盘中的“升级网络”面板

网络管理仪表盘中的“升级网络”面板

注意:在WordPress单站点安装中,管理员本质上是超级管理员,因为他们可以访问所有管理员权限。

您可以自定义用户角色,也可以使用WordPress的预定义权限创建自己的自定义角色。

用户角色和权限的优势

角色和权限系统是用户管理WordPress的支柱。以下是它的许多好处:

  • 用户角色可帮助您更有效地管理站点上的所有用户。即使您的站点上有数十个用户来自世界不同的地方,您也可以通过为每个人授予正确的角色来轻松地监督他们。
  • 通过限制用户使用特定权限,它可以帮助您使您的网站更加安全。例如,作者不能删除他人的文章,编辑不能更改主题或安装插件,订阅者只能访问自己的个人资料。
  • WordPress插件可以检查用户是否具有某些权限,并在此基础上执行某些操作。WordPress current_user_can() 函数有助于执行此检查。例如,安全插件只能向管理员显示其选项面板,但仍向所有用户显示安全警告。
  • 您可以编辑用户角色以将您的某些角色职责委派给其他用户,从而腾出时间。假设您的网站吸引了很多评论。在这种情况下,您可以允许受信任的作者进行审核。作为管理员,您仍将保留最终权力,但您可以根据需要分担一些责任。
  • 您可以使用权限检查来显示只有特定用户角色才能查看的私人文章和页面。这构成了会员网站的基础。
  • 您可以根据用户角色显示或隐藏站点上的前端元素(例如菜单项、小工具)。
  • 您可以创建具有自定义权限的自定义文章类型,并为每个用户角色授予或拒绝这些权限。同样,您还可以定义自定义权限以仅允许某些角色访问您的插件或主题设置。

如何有效管理WordPress用户角色

了解所有用户角色和权限至关重要,但您还需要了解如何在您的站点上有效地管理它们。虽然没有两个WordPress网站完全相同,但您可以遵循一些基本规则来充分利用WordPress的用户角色和权限。

为每个用户提供最少的访问权限

仅为您网站上的每个用户分配他们需要的访问级别。授予更少的权限总是比授予太多权限要好。保护WordPress用户角色对于确保您的网站及其内容安全至关重要。

为每个用户仔细分配用户角色

为每个用户仔细分配用户角色

限制管理员和编辑的数量

作为一般规则,每个站点都应该只有一个管理员,并且它应该只对站点进行核心更改。WordPress建议您遵守“最少权限原则”,即您应该只授予用户执行其所需工作所必需的权限。

例如,最好使用编辑级别的用户来管理网站上的内容,而不是使用管理员。如果您的网站上有多个编辑器,请确保您可以信任他们的广泛功能。

将作者角色分配给您可以信任的内容创建者,因为他们可以发布和删除自己的文章。贡献者角色更适合新的内容创建者和来宾文章。

根据需要自定义用户角色

默认的WordPress用户角色很有用,但它们可能并不适合每个用例。例如,让您的作者能够审核评论。

值得庆幸的是,WordPress使我们能够根据我们的独特需求自定义用户角色或创建新角色。您可以通过代码或借助WordPress用户角色插件手动执行此操作。我们将在本文中介绍这两种方法。

在WordPress多站点网络上管理用户

WordPress Multisite包含用于用户管理的独特设置。其中一些很容易掌握,而另一些则不然。

让我们深入探讨它们。

多站点网络注册设置

开箱即用,只有超级管理员可以在网络上创建新用户和站点。但是,它们可以允许用户将网络上的帐户注册为子站点的订阅者。

要启用此功能,请转到网络管理员 > 网络设置 > 注册设置 > 允许新注册,然后启用“用户帐户可能已注册”选项。

允许用户在您的网络上注册帐户

允许用户在您的网络上注册帐户

在这里,您还可以允许登录用户在您的网络上创建新站点。如果您想限制仅为您设置的用户创建站点的能力,您可以勾选此选项。

最后一个选项允许用户注册一个帐户以及在您的网络上创建一个站点。在您的网络上创建站点的用户被赋予其子站点的管理员角色。

一个用户帐户访问整个网络

当您在网络上创建用户帐户时,或者当用户在您网络的任何站点上注册帐户时,他们可以在登录后导航到网络内的任何站点。想象一下这是一个像Facebook或Reddit这样的社交网络,您可以在其中创建一个帐户并使用相同的用户配置文件访问所有组或子版块。

这是使用WordPress Multisite的主要好处之一。它允许您的用户只需注册一个帐户即可访问您的所有网站。

向站点管理员授予额外权限

您可以通过勾选添加新用户选项允许站点管理员将用户添加到他们自己的站点。

允许站点管理员向其子站点添加新用户

允许站点管理员向其子站点添加新用户

如前所述,您可以授予站点管理员访问管理其子站点上的插件的权限,方法是转到网络设置 > 菜单设置并选中启用管理菜单 > 插件选项。

子站点级用户注册

默认情况下,WordPress多站点安装仅允许用户注册整个网络。没有选项可以只为一个子站点启用用户注册。您可以使用Network Subsite User Registration插件更改此行为。

“Network Subsite User Registration”插件

“Network Subsite User Registration”插件

此插件允许站点管理员启用本地用户注册,并且仅限访问其站点。默认情况下,新用户将担任订阅者角色,但您可以通过修改插件设置来更改此设置。

允许任何人仅在您的子网站上注册帐户

允许任何人仅在您的子网站上注册帐户

将同一用户分配给多个子站点

您可以将同一用户分配给网络中具有唯一角色的多个站点。当用户登录到其站点的仪表板时,他们可以通过“我的站点”屏幕访问其所有站点的仪表板。

您可以将一个用户分配到WordPress多站点网络中的多个站点

您可以将一个用户分配到WordPress多站点网络中的多个站点

授予其他用户超级管理员权限

超级管理员还可以与其他用户共享他们的权限。您应谨慎启用此选项,并仅将其分配给您可以信任的用户。

授予其他用户网络的超级管理员权限

授予其他用户网络的超级管理员权限

了解WordPress Multisite中的所有用户管理设置将帮助您更好地管理网络。要为WordPress Multisite找到其他有用的插件,您可以在WordPress插件库搜索安装。

如何自定义现有的WordPress用户角色

您可以向现有用户角色添加权限以提高其访问级别。例如,您可以赋予编辑器管理插件的权力。或者,也许您希望贡献者对他们自己的文章进行审核。让我们学习如何做到这一点。

注意:如果您不喜欢使用代码,您可以跳过手动方法,直接转到下面的用户角色和权限插件部分。或者干脆聘请WordPress开发人员。

如何向用户角色添加权限

您可以使用WordPress add_cap() 函数向用户角色或任何特定用户添加权限。我将使用一个名为Customize User Role的自定义插件来展示如何使用此功能来赋予Editor角色管理插件的权限。

<?php
/*
Plugin Name:  Customize User Role
Version:  1.0
Description:  Demonstrating how to customize WordPress User Roles.
Author:  Salman Ravoof
Author URI:  https://www.salmanravoof.com/
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:  customize-user-role
*/

WordPress建议在插件或主题激活时运行此函数,因为它添加的设置存储到数据库中wp_options表中wp_user_roles字段下。每次加载任何页面时都运行此函数效率低下,因为每次加载页面时数据库表都会不断被覆盖。

由于我使用的是插件,因此我将使用register_activation_hook()函数挂钩到您激活插件时运行的动作。有很多方法可以做到这一点,但我使用了一个健壮的基于类的实现来确保没有冲突。

// this code runs only during plugin activation and never again
function sal_customize_user_role() {
require_once plugin_dir_path( __FILE__ ).'includes/class-sal-customize-user-role.php';   
Sal_Customize_User_Role::activate();
}
register_activation_hook( __FILE__, 'sal_customize_user_role' );

上面的代码在插件激活期间只运行一次。钩子函数sal_customize_user_role引用了一个名为Sal_Customize_User_Role自定义类.

我已经在一个名为的单独文件class-sal-customize-user-role.php中定义了这个类,并将它放在我的插件根文件夹中的一个名为includes的子文件夹中,但你可以随意命名它。

<?php
class Sal_Customize_User_Role {
public static function activate() {
// get the Editor role's object from WP_Role class
$editor = get_role( 'editor' );
// a list of plugin-related capabilities to add to the Editor role
$caps = array(
'install_plugins',
'activate_plugins',
'edit_plugins',
'delete_plugins' 
); 
// add all the capabilities by looping through them
foreach ( $caps as $cap ) {
$editor->add_cap( $cap );
}
}
}

下面是对上述代码的详细解释:

  • 首先定义您在主插件文件中引用的类及其函数。
  • get_role(‘editor’)函数从WP_Role类中检索Editor角色对象并将其分配给$editor变量。
  • 管理插件需要四个权限:install_pluginsactivate_pluginsedit_pluginsdelete_plugins。但是add_cap()函数只接受一个参数。因此,我们需要在数组中包含所有权限。定义$caps数组以容纳所有这些权限。如果您只添加一项权限,则无需定义数组。
  • add_cap( $cap )函数通过使用PHP函数foreach ()循环添加$caps数组中定义的所有权限。

保存所有插件文件,然后从管理员仪表板激活插件。现在让我们登录到编辑器仪表盘以查看更改。

编辑者现在可以从他们的仪表板管理插件

编辑者现在可以从他们的仪表板管理插件

将与插件相关的功能添加到其用户角色后,编辑者可以看到其管理菜单中列出的插件菜单。

编辑器仪表盘中的“添加插件”屏幕

编辑器仪表盘中的“添加插件”屏幕

您可以通过查看存储在WordPress站点数据库wp_options表中的wp_user_roles键值来检查分配给每个用户角色的权限。

以下是我发现分配给编辑角色的权限:

'editor' => 
array (
'name' => 'Editor',
'capabilities' => 
array (
'moderate_comments' => true,
'manage_categories' => true,
// [...lines cut off for brevity...]
'install_plugins' => true,
'activate_plugins' => true,
'edit_plugins' => true,
),
),

请注意最后三行,它使编辑器能够管理插件。

如果要删除这些权限,可以挂钩到register_deactivation_hook()函数并使用remove_cap()函数删除插件停用的权限,就像我们在插件激活时添加这些权限一样。

既然您已经了解了如何向用户角色添加权限,那么现在该学习如何从用户角色中删除权限了。

注意:您还可以挂钩after_switch_theme动作以在主题(和/或子主题)激活期间触发此代码。在这里,您必须在主题或子主题的(推荐)functions.php文件中包含代码。

如何从用户角色中删除权限

有时,您可能希望从用户角色中删除一项权限。您可以运行remove_cap()函数来删除角色或特定用户的权限。例如,delete_published_posts从Author用户角色中删除发布文章权限是一个好主意。

让我们完成这件事!

我将创建一个名为Customize Author Role的新自定义插件来开始。就像以前一样,我将通过挂钩register_activation_hook()函数只运行此代码一次。

<?php
/*
Plugin Name:  Customize Author Role
Version:  1.0
Description:  Demonstrating how to customize WordPress Author Role.
Author:  Salman Ravoof
Author URI:  https://www.salmanravoof.com/
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:  customize-author-role
*/
// this code runs only during plugin activation and never again
function sal_customize_author_role() {
require_once plugin_dir_path( __FILE__ ).'includes/class-sal-customize-author-role.php';
Sal_Customize_Author_Role::activate();
}
register_activation_hook( __FILE__, 'sal_customize_author_role' );

接下来,我将在文件中定义Sal_Customize_Author_Role类。我在上面的主插件文件class-sal-customize-author-role.php中引用了这两个资源。

<?php
class Sal_Customize_Author_Role { 
public static function activate() {
// get the Editor role's object from WP_Role class
$author = get_role( 'author' );
// remove the capability to delete published posts from an Author role
$author->remove_cap( 'delete_published_posts' );
}
}

remove_cap( 'delete_published_posts' )函数将删除从作者角色中删除已发布文章的权限。

默认情况下,允许作者删除其已发布的文章

默认情况下,允许作者删除其已发布的文章

是时候保存所有插件文件然后激活插件了。现在,登录到作者仪表盘并查看更改。

作者不能再删除他们发布的文章

作者不能再删除他们发布的文章

回收站选项不再适用于作者发布的文章。但是,他们仍然可以删除处于草稿待处理状态的未发布文章。

删除处于草稿或待处理状态的未发布文章

如果您甚至想禁用此权限,则还需要从作者角色中删除delete_posts权限。

为特定用户添加或删除权限

如果您想为特定用户添加权限,而不是整个用户角色,那么您可以使用WP_User::add_cap()类函数来添加权限。

// get the user object by their ID
$user = new WP_User( $user_id ); 
// add the capability to the specific user
$user->add_cap( $cap );

您可以使用get_user_by()函数通过使用他们的电子邮件、登录用户名或slug来检索任何用户的ID。

同样,您可以使用WP_User::remove_cap()类函数从特定用户中删除权限。

// get the user object by their ID
$user = new WP_User( $user_id );
// add the capability to the specific user
$user->add_cap( $cap );

像以前一样,仅在插件或主题激活时运行这些权限以保持代码优化。

注意:add_cap()remove_cap()都是WP_Role类的对象方法。您不能直接在代码中调用它们。您需要使用get_role()函数或$wp_roles全局变量来访问它们。

复制用户角色

您可以通过克隆现有用户角色的所有权限来创建新用户角色。您可以这样做:

add_role( 'clone', 'Clone', get_role( 'administrator' )->capabilities );

在上面的示例中,我正在创建一个名为Clone的新角色,该角色具有与管理员相同的权限。在主题或插件激活上运行此代码将确保克隆的角色仅添加一次。

如何在WordPress中创建自定义用户角色

默认用户角色的编​​辑权限是自定义它们的快速方法。但是,如果您要编辑角色的许多权限,那么最好完全创建一个新的自定义用户角色。通过这种方式,您可以为站点上的每个角色设置所需的确切权限。

要创建自定义用户角色,您需要使用add_role()函数。它接受三个参数。

add_role(  $role, $display_name, $capabilities );

前两个参数应该是函数运行的字符串(并且是必需的)。它们分别定义新自定义角色的名称和显示名称。最后一个参数是可选的,应该是一个数组。您可以使用它为新角色分配所有权限。

让我们创建一个名为Community Manager的自定义用户角色,他可以在整个站点中审核评论和编辑文章。以下是您的操作方法:

<?php
/*
Plugin Name:  Add Community Manager Role
Version:  1.0
Description:  Add a Custom User Role called 'Community Manager'
Author:  Salman Ravoof
Author URI:  https://www.salmanravoof.com/
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:  add-community-manager-role
*/
// this code will run only once on plugin activation and never again
function add_community_manager_role() {
add_role(
'community_manager',
__('Community Manager', 'add-community-manager-role'), 
array( 
'read' => true,
'moderate_comments' => true,
'edit_posts' => true,
'edit_other_posts' => true,
'edit_published_posts' => true
)
);
}
register_activation_hook( __FILE__, 'add_community_manager_role' );

和以前一样,add_role()函数仅在插件激活时运行一次,并且不再运行。保存文件并在管理员仪表盘中激活插件。您现在应该能够将Community Manager角色分配给新用户和现有用户。

将自定义用户角色分配给新用户

将自定义用户角色分配给新用户

将自定义用户角色分配给现有用户

将自定义用户角色分配给现有用户

您还可以通过检查数据库中wp_options表下wp_user_roles字段的值来验证分配给此新角色的权限。这是我在我网站的数据库中找到的内容:

array (
'administrator' => 
// [...]
'editor' => 
// [...]
'author' => 
// [...]
'contributor' => 
// [...]
'subscriber' => 
// [...]
'community_manager' => 
array (
'name' => 'Community Manager',
'capabilities' => 
array (
'read' => true,
'moderate_comments' => true,
'edit_posts' => true,
'edit_other_posts' => true,
'edit_published_posts' => true,
),
),
)

最后列出的是我们刚刚添加的具有所有权限的新角色。您可以通过添加或删除权限来进一步编辑此角色。

测试新用户角色

在将新用户角色分配给任何真实用户之前,必须测试它是否按预期工作。这是一个清单,您可以按照以下清单对其进行测试:

  1. 创建一个测试用户帐户并为其分配新的用户角色。
  2. 使用测试用户登录并确保其所有权限都按预期工作。例如,如果您已授予它编辑已发布文章的权限,则转到任何文章并检查您是否可以编辑它。您分配给该角色的能力越多,您将花费更多的时间来测试它们。
  3. 接下来,尝试直接在浏览器中访问任何更高级别的管理链接。我通过直接访问WordPress设置屏幕对此进行了测试,正如预期的那样,WordPress没有让我进入。WordPress显示的“拒绝访问”消息
  4. 完成测试后删除测试用户。

差不多就是这样!现在您可以将新角色分配给您站点的用户。

您可以使用User Switching或以View Admin As插件,只需单击一下即可在您网站上的不同用户帐户之间进行切换。它们对于测试多个用户的权限非常方便。我将在本文后面详细介绍它们。

在WordPress多站点中创建自定义用户角色

WordPress多站点处理用户角色的方式与WordPress单站点安装略有不同。虽然您可以像以前一样使用add_role()函数创建自定义用户角色,但新角色仅适用于网络的主站点(您创建的第一个站点)。它不会传播到网络上的所有子站点。

为确保回调函数中的代码在网络中的每个站点上运行,您需要通过逐个循环遍历网络的所有站点来强制其执行。对于这个示例,我将创建一个名为Plugin Manager的新用户角色,它将具有管理插件的所有权限。

<?php
/*
Plugin Name:  Add Plugin Manager Role
Version:  1.0
Description:  Add a custom user role named Plugin Manager in a WordPress Multisite Installation
Author:  Salman Ravoof
Author URI:  https://www.salmanravoof.com/
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:  add-plugin-manager-role
*/
/* 
make the code run on every site in the network
when the plugin is Network Activated
*/
function add_plugin_manager_role( $network_wide ) {
if ( is_multisite() && $network_wide ) { 
// run the code for all sites in a Multisite network
foreach ( get_sites(['fields'=>'ids']) as $blog_id ) {
switch_to_blog( $blog_id );
add_role(
'plugin_manager',
__('Plugin Manager', 'add-plugin-manager-role'),
array( 
'install_plugins' => true,
'activate_plugins' => true,
'edit_plugins' => true,
'delete_plugins' => true
)
);
}
restore_current_blog();
}
else {
add_role(
'plugin_manager',
__('Plugin Manager', 'add-plugin-manager-role'),
array( 
'install_plugins' => true,
'activate_plugins' => true,
'edit_plugins' => true,
'delete_plugins' => true
)
);
}
}
register_activation_hook( __FILE__, 'add_plugin_manager_role' );

让我们详细看一下上面的代码:

  • 首先,您使用register_activation_hook()函数挂钩插件激活动作并传入您的回调函数。这里,回调函数是add_plugin_manager_role().
  • 然后你定义你的回调函数,并传入一个名为$network_wide的参数.
  • $network_wide参数是一个布尔值,如果您为整个网络激活了插件,它将返回true。如果仅为当前站点启用,则返回false。此外,它仅适用于多站点安装,其默认值为false
  • is_multisite() && $network_wide条件语句检查插件在多站点安装中是否为“网络激活” 。如果是true,它将运行If语句中包含的代码。如果是false,则运行语句中else的代码。
  • get_sites(['fields'=>'ids'])函数返回网络中所有站点ID的列表。使用foreach()PHP函数,它循环遍历所有这些代码,以分别在每个网站上运行代码。
  •  switch_to_blog( $blog_id )函数指示接下来的几行代码为$blog_id的子网站执行。由于WordPress最初是作为一个博客平台启动的,因此您可以将“blog”一词替换为“site”,以便更好地理解其用法。
  • 接下来,您使用add_role()函数创建具有其权限的自定义用户角色。这遵循与本文前面解释的相同的代码约定。
  • 在终止循环之前,定义restore_current_blog()函数以确保您将切换的站点状态恢复到其原始状态。
  • else语句中的代码是确保与单站点安装兼容的备用代码。

保存插件文件并转到网络管理 > 插件屏幕以“网络激活”您的自定义插件。之后,前往站点的任何编辑站点屏幕下的用户选项卡,检查新的插件管理器角色是否可用。

将现有站点用户的角色更改为新用户角色

将现有站点用户的角色更改为新用户角色

将自定义用户角色分配给子站点的新用户

将自定义用户角色分配给子站点的新用户

我还确认了这个新用户角色在网络中的其他站点上可用。它完美无缺。

将新用户角色分配给子站点上的现有用户

将新用户角色分配给子站点上的现有用户

您还可以通过查看您站点的数据库来验证新的自定义角色及其权限。但是,与单站点安装不同,WordPress Multisite为每个子站点创建一个单独的wp_options表。

用户角色存储在WordPress多站点数据库中的位置

用户角色存储在WordPress多站点数据库中的位置

您可以找到列为wp_2_optionswp_3_optionswp_4_options的子网站特定表。同样,角色和权限存储在各自的字段中,分别名为wp_2_user_roleswp_3_user_roleswp_4_user_roles

您已经定义了如何在网络中的所有站点上创建自定义用户角色,但是将来要创建的站点呢?为确保将此自定义用户角色添加到网络中创建的每个新站点,您可以将以下代码附加到您的插件中:

// run the code once again when a new site is created
function add_custom_user_role_new_site( $blog_id ) { 
// check whether the plugin is active for the network
if ( is_plugin_active_for_network( 'add-custom-user-role/add-custom-user-role.php' ) ) {
switch_to_blog( $blog_id );
add_role(
'plugin_manager',
__('Plugin Manager', 'add-plugin-manager-role'),
array( 
'install_plugins' => true,
'activate_plugins' => true,
'edit_plugins' => true,
'delete_plugins' => true
)
);
restore_current_blog();
}
}
add_action( 'wpmu_new_blog', 'add_custom_user_role_new_site' );
  • 每当有人在多站点网络中创建新站点时,wpmu_new_blog动作就会触发您可以使用回调函数挂钩此操作以添加自定义用户角色。
  • is_plugin_active_for_network ()函数检查插件是否对整个网络都处于活动状态,并返回一个布尔值。它接受插件文件的路径作为参数。
  • 其余代码遵循与之前相同的逻辑。您使用$blog_id参数切换到新站点,使用add_role()函数创建您的自定义角色,然后使用restore_current_blog()函数切换回当前站点。

如何从WordPress中删除用户角色

您可以使用remove_role( )函数从WordPress中删除任何用户角色。它只接受一个参数,即角色名称。例如,您可以通过在站点的任何位置运行以下代码来删除贡献者角色:

remove_role( 'contributor' );

与未在插件或主题激活时运行的函数将不断更新数据库不同,

add_role()函数不同,如果不是在插件或主题激活上运行,它会不断更新数据库,remove_role()函数仅在角色存在时执行。由于作为参数传入的任何角色在第一次运行时都会被删除,因此您不必担心在何处运行此函数。

但是,为避免将来发生冲突,请在从数据库中删除角色后删除代码。

在WordPress中创建自定义权限

对于大多数用例来说,使用WordPress的内置权限编辑现有用户角色和创建新的自定义角色就足够了,但您可能希望为自定义代码(使用插件或主题)引入的功能定义新权限。

然后,您可以使用这些自定义权限来定义新角色或将它们添加到现有角色中。

例如,WooCommerce添加了额外的权限和角色以及其广泛的电子商务权限。它添加的一些权限是:

  • 允许管理WooCommerce设置
  • 创建和编辑产品
  • 查看WooCommerce报告

使用这些权限,它添加了两个新的用户角色:CustomerShop Manager

WooCommerce添加自己的用户角色

WooCommerce添加自己的用户角色

客户角色与订阅者角色几乎相似,不同之处在于具有客户角色的用户可以编辑其帐户信息并查看当前/过去的订单。Shop Manager角色包括编辑器的所有权限,此外还授予他们所有WooCommerce权限。

其他引入自定义权限和/或角色的插件包括The Events CalendarVisual PortfolioWPMLWP ERP

如果您深入研究所有这些插件的文档,您会注意到它们几乎将所有自定义权限都与它们定义的自定义文章类型联系在一起。在WooCommerce的情况下,它是ProductsOrders自定义文章类型,而在其他情况下,它分别是EventsPortfoliosTranslationsCustomers

让我们学习如何创建绑定到自定义文章类型的自定义权限。

首先,设置一个插件并注册您想要的自定义文章类型。在我的示例中,我正在注册一个名为Stories的新自定义文章类型。

<?php
/*
Plugin Name:    Custom Post Type and Capabilities
Version:        1.0
Description:    Register a custom post type and define custom capabilities tied into it.
Author:         Salman Ravoof
Author URI:     https://www.salmanravoof.com/
License:        GPLv2 or later
License URI:    https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:    custom-post-type-capabilities
*/
// register a custom post type, in this case it's called "story" //
function cpt_story_init() {
$labels = array(
'name'                  => _x( 'Stories', 'custom-post-type-capabilities' ),
'singular_name'         => _x( 'Story', 'custom-post-type-capabilities' ),
'menu_name'             => _x( 'Stories', 'Admin Menu text', 'custom-post-type-capabilities' ),
'name_admin_bar'        => _x( 'Story', 'Add New on Toolbar', 'custom-post-type-capabilities' ),
'add_new'               => __( 'Add New', 'custom-post-type-capabilities' ),
'add_new_item'          => __( 'Add New Story', 'custom-post-type-capabilities' ),
'new_item'              => __( 'New Story', 'custom-post-type-capabilities' ),
'edit_item'             => __( 'Edit Story', 'custom-post-type-capabilities' ),
'view_item'             => __( 'View Story', 'custom-post-type-capabilities' ),
'all_items'             => __( 'All Stories', 'custom-post-type-capabilities' ),
'search_items'          => __( 'Search Stories', 'custom-post-type-capabilities' ),
'parent_item_colon'     => __( 'Parent Stories:', 'custom-post-type-capabilities' ),
'not_found'             => __( 'No stories found.', 'custom-post-type-capabilities' ),
'not_found_in_trash'    => __( 'No stories found in Trash.', 'custom-post-type-capabilities' ),
'featured_image'        => _x( 'Story Cover Image', 'custom-post-type-capabilities' ),
'set_featured_image'    => _x( 'Set cover image', 'custom-post-type-capabilities' ),
'remove_featured_image' => _x( 'Remove cover image', 'custom-post-type-capabilities' ),
'use_featured_image'    => _x( 'Use as cover image', 'custom-post-type-capabilities' ),
'archives'              => _x( 'Story archives', 'custom-post-type-capabilities' ),
'insert_into_item'      => _x( 'Insert into story', 'custom-post-type-capabilities' ),
'uploaded_to_this_item' => _x( 'Uploaded to this story', 'custom-post-type-capabilities' ),
'filter_items_list'     => _x( 'Filter stories list', 'custom-post-type-capabilities' ),
'items_list_navigation' => _x( 'Stories list navigation', 'custom-post-type-capabilities' ),
'items_list'            => _x( 'Stories list', 'custom-post-type-capabilities' ),
);
$args = array(
'labels'             => $labels,
'public'             => true,
'menu_icon'          => 'dashicons-book',   
'publicly_queryable' => true,
'show_ui'            => true,
'show_in_menu'       => true,
'query_var'          => true,
'rewrite'            => array( 'slug' => 'story' ),
'capability_type'    => array ( 'story', 'stories' ),
'map_meta_cap'       => true,
'has_archive'        => true,
'hierarchical'       => false,
'menu_position'      => 6,
'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ),
'show_in_rest'       => true,
);
register_post_type( 'story', $args );
}
add_action( 'init', 'cpt_story_init' );

以下是上述脚本的细分:

  • 使用register_post_type()函数来注册您的自定义文章类型。您可以挂钩到init动作以运行此函数。
  • register_post_type()函数接受两个参数。第一个是自定义文章类型的名称,第二个是包含用于注册文章类型的所有参数的数组。
  • $args变量包含您将传递给register_post_type()函数的所有参数。它的一个参数(‘labels’)本身就是一个单独定义为$label变量的数组。
  • 请注意'capability_type' => 'post'参数。它是WordPress用于为自定义文章类型构建读取、编辑和删除的默认权限类型。
  • 要创建自定义权限,您需要将capability_type参数的值替换为自定义权限的首选名称。它接受字符串或数组作为参数。如果您的自定义权限的复数不遵循标准的s后缀语法(例如book/books vs story/stories),该数组很有用。
  • 您还可以使用capabilities参数以不同于WordPress自动命名的方式命名新权限。
  • 您必须将您的自定义权限映射到WordPress的原始权限。将map_meta_cap参数设置为,true以便WordPress知道它需要按照建议映射自定义权限。

接下来,您需要将自定义权限添加到要授予对Stories自定义文章类型的访问权限的角色。对于此示例,我将权限授予管理员和编辑者角色。

// add the custom capabilities to the desired user roles 
$roles = array( 'editor','administrator' );
foreach( $roles as $the_role ) {      
$role = get_role($the_role);
$role->add_cap( 'read' );
$role->add_cap( 'read_story');
$role->add_cap( 'read_private_stories' );
$role->add_cap( 'edit_story' );
$role->add_cap( 'edit_stories' );
$role->add_cap( 'edit_others_stories' );
$role->add_cap( 'edit_published_stories' );
$role->add_cap( 'publish_stories' );
$role->add_cap( 'delete_others_stories' );
$role->add_cap( 'delete_private_stories' );
$role->add_cap( 'delete_published_stories' );
}

保存文件,然后激活插件。您现在应该在管理员或编辑器仪表盘中看到Stories链接和面板。

WordPress仪表盘中的“Stories”自定义文章类型面板

WordPress仪表盘中的“Stories”自定义文章类型面板

如果您检查站点上可用的权限,您还将看到我们添加的所有与Stories相关的权限。在这里,我使用View Admin As插件来检查权限。

与“Stories”自定义文章类型相关的自定义权限

与“Stories”自定义文章类型相关的自定义权限

您可以通过Gist下载此插件的扩展版本。它使用一组自定义权限注册了一个名为Projects的自定义文章类型。然后,它会将他们分配给名为StudentTeachers的两个自定义角色, 以帮助您建立一个教育网站。

有一种方法可以定义自定义权限,允许用户根据他们的角色访问您的插件设置。讨论如何执行此操作超出了本文的范围,但您可以参考StackExchange上的关于此内容的文章以获取更多信息。

最好的WordPress用户角色和权限插件

知道如何使用代码调整用户角色和权限固然很棒,但并不适合所有人。如果您不确定自己在做什么,那么很多事情都会出错。但是,即使您使用的是插件,了解角色和权限在WordPress中的工作方式也会有很大帮助。

让我们看一些最流行的WordPress插件,以轻松自定义WordPress用户角色和权限。我还将列出一些有用的插件来快速测试角色和权限特性。

User Role Editor (by Vladimir Garagulia)

WordPress插件-User Role Editor

WordPress插件-User Role Editor

User Role Editor是WordPress插件库中最流行的角色和能力管理插件。它带有一个简单的界面,允许任何人只需单击一下即可编辑用户角色和权限。

安装并激活插件后,您可以转到管理仪表板中的用户 > User Role Editor以访问其主界面。

User Role Editor仪表盘

User Role Editor仪表盘

以下是上面标记的仪表盘部分的详细概述:

  1. 从下拉菜单中选择要自定义的角色。它不仅会列出默认角色,还会列出数据库中存在的所有角色。您还可以选择以人类可读的形式而不是它们的常量来显示权限。另一个选项可让您查看最新版本的WordPress不再支持的已弃用功能。
  2. 用户角色编辑器将所有权限分组到左侧的不同类别中。核心类别包括所有内置权限。由于我在此站点上安装了WooCommerce,因此您还可以找到其自定义文章类型的权限。甚至User Role Editor插件也添加了自己的一组自定义权限。
  3. 在右侧,您会发现列出的所有权限。当我选择了All组时,我可以看到所有权限。但是,您可以通过单击左侧的组来过滤它。您还可以勾选顶部的仅授予选项以隐藏任何用户角色未使用的所有权限。
  4. 您还可以从此处Add RoleRename RoleAdd CapabilityDelete Role。在最底部,您会发现隐藏用户角色的管理栏的附加选项。

以人类可读的形式显示权限

以人类可读的形式显示权限

要自定义任何用户角色,只需勾选或取消勾选您想要的权限,然后单击Update按钮以保存您的更改。就这么容易。

在User Role Editor中添加新角色

在User Role Editor中添加新角色

单击Add Role按钮以创建新角色。您可以使用Make copy of下拉选项从头开始创建角色或复制现有角色。

轻松重命名“角色显示名称”

轻松重命名“角色显示名称”

您还可以通过单击Rename Role按钮来重命名Role Display Name但是,您不能更改其Role ID(或角色名称)。一种解决方法是复制要更改其ID的角色,然后删除原始角色。

在User Role Editor中添加新权限

在User Role Editor中添加新权限

您可以通过单击Add Capability按钮来添加新权限。

轻松删除未分配的用户角色

轻松删除未分配的用户角色

单击Delete Roles按钮可让您删除尚未分配给任何用户的自定义角色。

注意:User Role Editor不允许您删除WordPress的内置角色或权限。如果它分配给任何用户,它也不允许您删除任何自定义角色,如果它分配给任何非管理员角色,它也不允许您删除任何自定义权限。

User Role Editor中的“Delete Capability”按钮

User Role Editor中的“Delete Capability”按钮

您应该注意,仅当未将任何权限分配给非管理员时,才会显示Delete Capability按钮。否则它是隐藏的。

您还可以为同一用户分配多个角色,或者根本不给他们任何角色。

剥离用户的任何角色

剥离用户的任何角色

要为用户分配多个角色,您需要转到仪表板中的“Users”面板,然后单击将鼠标悬停在用户名上后将在下面看到的“Capabilities链接。

为同一用户分配多个角色

为同一用户分配多个角色

如果您在管理仪表盘中转到Settings > User Role Editor,您还将找到用户角色编辑器插件的其他选项。

User Role Editor的“General”选项选项卡

User Role Editor的“General”选项选项卡

在这里,您可以更改插件的默认设置、安装附加模块、更改分配给新用户的默认角色,甚至将用户角色和权限重置为默认状态。

附加模块可帮助您扩展User Role Editor的功能

附加模块可帮助您扩展User Role Editor的功能

为新用户设置默认角色

为新用户设置默认角色

将所有用户角色和权限重置为其默认状态

将所有用户角色和权限重置为其默认状态

虽然User Role Editor的免费版本对于大多数用例来说已经绰绰有余,但其高级版本包括更多功能,包括支持在WordPress多站点设置中管理角色和权限。

Members by MemberPress

MemberPress开放的WordPress插件-Members

MemberPress开放的WordPress插件-Members

Members是WordPress的一个以会员为中心的用户角色和权限插件。最初作为一个简单的用户角色和权限管理插件推出,它后来转向会员功能。

Members中的“Roles”面板

Members中的“Roles”面板

安装并激活插件后,您可以通过转到仪表板中的Members> Roles来查看站点上的所有可用角色。

成员插件允许您删除所有角色,包括内置的WordPress角色,除了管理员和默认角色。您还可以EditClone角色,以及列出分配给特定角色的所有用户。

Members中的“Edit Role”面板

Members中的“Edit Role”面板

在“Edit Role”面板中,您可以通过勾选和取消勾选相关复选框来授予或明确拒绝特定角色的权限。您还可以从此处向角色添加自定义权限。

Members中的“Add New Role”面板

Members中的“Add New Role”面板

单击“Add New Role链接将带您进入一个类似的屏幕,您可以在其中通过给它一个显示名称、一个ID和它的一组权限来创建一个新角色。

Members中的“General Settings”面板

Members中的“General Settings”面板

就像使用User Role Editor一样,您可以使用Members为用户分配多个角色。您还可以设置内容权限以将内容限制为仅具有特定角色的用户。

您还可以在Members中启用“Private Site”模式

您还可以在Members中启用“Private Site”模式

在这里,您可以将您的网站及其提要设置为私有。此外,您可以通过强制身份验证来限制对WordPress的REST API的访问。

Members插件的各种附加组件

Members插件的各种附加组件

Members插件以其惊人的附加组件与其他角色和权限插件区分开来。它们可帮助您向网站添加大量附加权限,例如用户隐私和个人数据管理 ( GDPR )、与标签和类别相关的权限、建立角色层次结构等等。

Members与流行的WordPress插件集成

Members与流行的WordPress插件集成

您可以将Members与许多流行的WordPress插件无缝集成。例如,您可以使用它来创建和管理高级自定义字段 (ACF) 插件的自定义权限。它集成的其他一些插件包括Easy Digital Downloads、GiveWP、Meta Box和WooCommerce。

以会员为中心的会员附加组件(付款、订阅、电子邮件营销和高级内容保护)仅在其高级版本上可用。

WPFront User Role Editor

“WPFront User Role Editor”插件

“WPFront User Role Editor”插件

WPFront User Role Editor可帮助您在WordPress站点中创建、编辑或删除用户角色和权限。它的功能集类似于之前讨论的插件,但它有两个突出的功能。

用户迁移

管理仪表板中的屏幕并将属于特定用户角色的所有用户迁移到另一个。您甚至可以为您的用户分配次要角色。

如果您必须将站点上的大量用户从一个角色迁移到另一个角色,此功能将非常方便。

WPFront User Role Editor中的“登录重定向”设置屏幕

WPFront User Role Editor中的“登录重定向”设置屏幕

WPFront User Role Editor的另一个有用功能是基于角色的登录重定向。例如,您可以在具有编辑角色的用户登录后将其重定向到文章页面。您还可以选择阻止他们访问/wp-admin页面并查看前端的工具栏。

Advanced Access Manager

“Advanced Access Manager”插件

“Advanced Access Manager”插件

Advanced Access Manager (AAM) 是一个功能强大的WordPress插件,可让您控制网站的几乎所有方面。它包括200多个不同的功能,专为了解角色和权限如何工作的高级WordPress用户而设计。

与上面列出的插件相比,AAM的功能要多得多。但由于这是一个以开发人员为中心的插件,因此对于初学者或中级用户来说并不容易使用。

Advanced Access Manager中的主仪表盘

Advanced Access Manager中的主仪表盘

您可以将AAM的主仪表盘分成四个不同的区域。我在上图中对它们进行了编号,并在下面进行了概述。

  1. 最上面的区域提到了当前正在考虑的“主题”。在这里,它是Role: Administrator,但它可以是特定用户、匿名访问者或每个人的默认设置。
  2. 主题下方的区域是主面板,您可以在其中进行所有设置,以管理对该主题的站点上各种事物的访问。
  3. 第三个区域是Users/Roles Manager。使用其选项卡式图标,您可以选择要管理的内容。它是用户角色、特定用户、匿名访问者还是每个人的默认访问行为?
  4. 第四个区域可让您管理AAM的设置、安装其高级插件并联系支持人员。

Advanced Access Manager中的“设置”面板

Advanced Access Manager中的“设置”面板

AAM根据其行为和使用情况将其设置分为5组。

  • 服务设置列出了您可以启用或禁用的所有AAM模块。通过有选择地加载模块,您可以优化您的网站。
  • 核心设置区域允许您启用或禁用某些AAM和WordPress的核心功能。
  • 内容设置与网站内容(例如文章、页面、自定义文章类型)相关。
  • 安全设置部分包括AAM安全登录功能的设置。截至目前,只有两种设置可用:Brute Force LockoutOne Session Per User
  • ConfigPress是一项有趣的功能,可让您使用基于INI的代码更改AAM插件的配置

Advanced Access Manager中的“附加组件”面板

Advanced Access Manager中的“附加组件”面板

AAM是一个面向开发人员的插件,不仅限于用户角色和权限。它使您可以精细控制每个角色在您的网站上可以或不能做什么。

为您的网站安装“访问策略”以确保其安全

为您的网站安装“访问策略”以确保其安全

您可以使用AAM为您的网站设置访问和安全策略。它定义了哪个角色以及在什么条件下可以访问您网站上的各种资源。如果您想立即开始,您可以从AAM访问策略中心安装准备安装的访问策略。

用于添加前端登录表单的“AAM安全登录”小工具

用于添加前端登录表单的“AAM安全登录”小工具

AAM允许您创建临时用户帐户和角色。这是一种与外部资源共享帐户的安全方式。临时用户帐户将在您设置的日期和时间后过期。对于临时角色,用户将在指定期限后被剥夺该角色。

本文无法涵盖AAM的所有功能。您可以参考Advanced Access Manager的文档以了解有关其所有广泛功能的更多信息。

提示: User Access Manager是高级访问管理器的一个不错的替代品,尽管它的功能较少且不经常更新。

User Switching

WordPress插件-“User Switching”

WordPress插件-“User Switching”

User Switching允许您只需单击一下即可在不同的WordPress用户帐户之间进行切换。如果您正在测试大量用户角色和权限,使用此插件将帮助您节省大量时间。用户切换使用WordPress的内置cookie身份验证系统来记住您切换的帐户,以便您可以立即切换回它们。

安装并激活插件后,访问仪表盘中的Users菜单。您将看到每个用户的Switch To链接。单击此按钮将切换到您想要的用户。

单击“Switch To”链接以切换到您想要的用户

单击“Switch To”链接以切换到您想要的用户

您可以通过单击仪表盘或用户配置文件屏幕中的Switch back to链接来切换回原始帐户。

WordPress用户切换

您还可以暂时Switch Off您的管理员帐户,以查看您的前端对访问者的显示方式。

只需单击一下即可打开和关闭您的帐户

只需单击一下即可打开和关闭您的帐户

作为一项安全措施,只有具有编辑用户能力的用户才能切换用户帐户。默认情况下,只有管理员在WordPress单站点安装中具有此权限,而在多站点网络中,只有超级管理员具有此权限。

为了进一步简化用户切换,您可以安装Admin Bar User Switching扩展以使Switch to user链接出现在您的管理栏中。

将“Switch to user”链接添加到您的管理栏

将“Switch to user”链接添加到您的管理栏

View Admin As

WordPress插件-“View Admin As”

WordPress插件-“View Admin As”

View Admin As是一个高级用户切换插件,还包括角色和权限管理器。与User Switching插件不同,您无需安装扩展程序即可将用户切换菜单添加到管理栏。默认情况下,View Admin As会将其所有主菜单项添加到管理栏。

管理栏中的“View As”菜单

管理栏中的“View As”菜单

即使不存在具有这些角色的用户,您也可以在现有用户或角色之间切换(通过承担他们的能力)。单击Site visitor链接将带您到站点的前端,在那里您可以作为普通用户测试站点功能,而无需离开浏览器的选项卡。

View Admin As允许您临时更改自己的权限。由于它是以非破坏性方式完成的,因此您不会失去对主要功能的访问权限。

为当前用户临时自定义权限

为当前用户临时自定义权限

切换到用户帐户后,您可以直接从菜单编辑他们的屏幕首选项和设置。您还可以分别在前端和后端切换语言/区域设置。

您不限于一种视图类型,因为您可以组合各种选项并同时应用它们。

View Admin As附带两个可选模块,您可以根据需要启用它们。

查看管理员身份设置和可选模块

查看管理员身份设置和可选模块

第一个模块添加了Role Defaults功能,可让您为所有角色设置默认屏幕设置。您可以将这些默认设置应用于角色、单个用户或未来的新用户。

第二个模块启用Role Manager功能。您使用此模块对角色和权限所做的任何更改都是永久性的。与其他角色编辑器插件不同,此模块将允许您通过自动将分配给用户的角色迁移到另一个角色来删除分配给用户的角色。

您可以参考View Admin As文档以了解有关其广泛功能的更多信息。

小结

WordPress角色和权限是用户访问管理背后的基本概念。它们可以帮助您控制您网站上的所有用户可以执行的操作。许多插件和主题也使用它们向WordPress核心添加非常有用的功能。

WordPress有自己的一组角色和权限,但如果您需要更大的灵活性,您可以自定义它们或创建自己的角色和权限。您可以使用自己的代码或使用第三方插件来执行此操作。

了解什么是角色和权限,并学习如何管理它们,是掌握WordPress的关键步骤。今天就开始使用它们吧!