分类: WordPress基础

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

    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()
    )
    )
    array (
    ‘rolename’ => array (
    ‘name’ => ‘rolename’,
    ‘capabilities’ => array()
    )
    )
    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,
    ),
    ),
    )
    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,
    ),
    ),
    )
    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 );
    define( ‘ALLOW_UNFILTERED_UPLOADS’, true );
    define( 'ALLOW_UNFILTERED_UPLOADS', true );

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

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

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

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

    原始权限与元权限

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

    • 原始权限:这些能力被授予特定角色。具有这些角色的用户会自动继承原始权限。
    • 元权限:这些权限默认不授予任何角色。WordPress在其代码和数据库中检查某个对象,
  • 如何更改您的WordPress网站URL地址

    如何更改您的WordPress网站URL地址

    您的WordPress地址和网站地址(或URL)非常重要,因为它们引用了您网站在网络上的地址以及您网站文件和管理屏幕的位置。

    您可能需要或想要更改WordPress URL的原因有很多。也许您正在更改域移动到子域、从www更新到非www、移动文件,甚至从HTTP迁移到HTTPS

    无论是哪种情况,在更改URL时都有一些选项,其中一些选项比其他选项更高级。

    在本指南中,我们将向您展示可用于更改WordPress安装URL和WordPress站点URL的不同方法,这是两个不同的东西。

    1. 通过管理仪表盘更改WordPress URL
    2. 在wp-config.php文件中更改WordPress URL
    3. 直接在数据库中更改WordPress URL
    4. 使用WP-CLI更改WordPress URL
    5. 更改WordPress登录URL
    6. 更改WordPress网址后的重定向

    通过管理仪表盘更改WordPress URL

    第一种也是最常见的方法是直接从管理仪表盘中更改您的WordPress URL 。在管理菜单中,转到设置 > 常规以访问常规设置屏幕。然后,您可以更新以下内容:

    • WordPress地址 (URL):到达您网站的地址。
    •  站点地址 (URL):您的WordPress核心文件的地址。

    常规设置 – WordPress URL

    常规设置 – WordPress URL

    除非您为WordPress提供自己的目录,否则两者都应该匹配。请记住,单击Save Changes后,您的WordPress仪表盘现在只能通过新URL访问。因此,请务必检查您输入的URL是否正确。

    如果您不小心输入了错误的 URL,您可以通过编辑wp-config.php文件来覆盖管理屏幕中的设置(请参阅下面的下一个方法)。

    注意:如果上面的字段显示为灰色,很可能是因为您的wp-config.php文件中已经有硬编码的值。在这种情况下,跳转到下一个方法。

    在wp-config.php文件中更改WordPress URL

    更改WordPress URL的第二种最常用方法是在wp-config.php文件中。重要的是要注意wp-config.php中的值会覆盖WordPress管理屏幕中的设置。

    如果这些字段不可编辑(如下所示),很可能是因为它们在此文件中被硬编码。

    常规设置URL灰显

    常规设置URL灰显

    wp-config.php文件通常位于WordPress站点的根目录中,可以通过FTP、SSH或WP-CLI访问。

    在您的wp-config.php文件中,将这两行添加到告诉您停止编辑的行上方的某处:

    define( ‘WP_HOME’, ‘http://yoursiteurl.com’ );
    define( ‘WP_SITEURL’, ‘http://yoursiteurl.com’ );
    define( ‘WP_HOME’, ‘http://yoursiteurl.com’ );
    define( ‘WP_SITEURL’, ‘http://yoursiteurl.com’ );
    define( 'WP_HOME', 'http://yoursiteurl.com' );
    define( 'WP_SITEURL', 'http://yoursiteurl.com' );

    保存您的wp-config.php文件并关闭它。

    当您进入WordPress管理后台的常规设置屏幕时,您会看到这两个字段现在显示为灰色。除非您从wp-config.php中删除这两行,否则您无法编辑它们。

    如果您想再次访问仪表板中的这些设置,您需要做的就是从wp-config.php文件中删除它们。

    直接在数据库中更改WordPress URL

    您可以用来更改WordPress URL的第三种方法是直接在WordPress数据库中。为此,您使用phpMyAdmin。这通常是作为最后的手段。

    注:如果操作不正确,直接从phpMyAdmin编辑和操作数据库表可能会破坏您的站点。确保在编辑数据库之前备份您的站点

    在phpMyAdmin中,单击左侧的数据库。然后向下滚动并单击“wp_options”表。如果您的数据库有不同的前缀,它的命名可能会略有不同,例如wp56_options。

    phpMyAdmin – wp_options表

    phpMyAdmin – wp_options表

    然后找到site urlhome字段。双击每个选项的option_value字段并输入新的URL。

    phpMyAdmin – 编辑URL

    phpMyAdmin – 编辑URL

    您的更改将自动保存。

    使用WP-CLI更改WordPress URL

    第四种选择是使用WordPress命令行界面 (WP-CLI) 访问您的站点并编辑URL。

    您需要通过SSH访问您的站点,并且您需要熟悉使用WP-CLI访问您的站点的过程。

    如果您不熟悉WP-CLI,可以查看我们关于从终端管理WordPress的深入文章。

    编辑URL的命令如下:

    wp option update home ‘http://yoursiteurl.com’
    wp option update siteurl ‘http://yoursiteurl.com’
    wp option update home ‘http://yoursiteurl.com’
    wp option update siteurl ‘http://yoursiteurl.com’
    wp option update home 'http://yoursiteurl.com'
    wp option update siteurl 'http://yoursiteurl.com'

    更改WordPress登录URL

    有时您可能想要更改WordPress登录的URL,而不是实时站点的URL。

    您的登录URL通常是您的域名,后跟/wp-admin或/wp-login。但是可以将其更改为更简单的内容,以便为您的用户和客户提供更好的用户体验,或者为您的网站管理员打上烙印并删除对WordPress的明显引用。

    您可以手动或通过安装插件来更改WordPress登录URL 。

    更改WordPress网址后的重定向

    更改WordPress URL后,您需要确保使用旧URL的任何人都被重定向到新URL,并且不会出现错误。

    如果您使用宝塔,则可以使用宝塔面板设置重定向。按照重定向最佳实践指南以避免重定向错误,如“重定向过多”,并了解如何设置它,以免影响您网站的性能。

    在宝塔面板中创建重定向

    在宝塔面板中创建重定向

    您可能还需要为单个文章或页面添加重定向,尽管通配符重定向更有可能。

    如果您没有使用宝塔,请查看您的托管服务提供商是否允许您在控制面板中设置通配符重定向。

    或者,您可以使用Redirection之类的插件来设置从旧域名到新域名的通配符重定向。

    如果您在您的网站上运行Yoast高级版并且您需要编辑单个文章或页面的URL,该插件将自动为您设置重定向,因此您无需手动执行此操作。如果您知道自己在做什么,它还允许您设置在更改站点URL时可以使用的正则表达式重定向。我们的重定向深度指南解释了正则表达式重定向的工作原理。

    小结

    如果您需要更改您的WordPress URL,因为您已经切换了域或您正在转移到HTTPS,您可以使用多种方法来执行此操作。

    您可以更改WordPress管理后台中的设置,将它们硬编码到wp-config.php文件中,编辑数据库或使用WP-C