首页 / 插件开发手册 / 用户 / 角色和能力

角色和能力

角色和能力是WordPress的两个重要方面,允许您控制用户权限。

WordPress将角色及其能力存储在options表中的user_roles键下。

 

角色

角色为用户定义了一组能力。例如,用户可能在其仪表板中看到和执行的操作。

默认情况下,WordPress有六种角色:

  • Super Admin(超级管理员)
  • Administrator(管理员)
  • Editor(编辑)
  • Author(作者)
  • Contributor(贡献者)
  • Subscriber(订阅者)

可以添加更多角色,也可以删除默认角色。

 

新增角色

使用add_role()添加新角色并为其分配能力。

function wporg_simple_role() {
	add_role(
		'simple_role',
		'Simple Role',
		array(
			'read'         => true,
			'edit_posts'   => true,
			'upload_files' => true,
		),
	);
}

// Add the simple_role.
add_action( 'init', 'wporg_simple_role' );
Alert:
在第一次调用add_role()之后,角色及其能力将存储在数据库中!

连续调用不会起任何作用:包括更改能力列表,这可能不是您期望的行为。

Note:
批量更改能力列表:使用remove_role()删除角色,然后使用add_role()将其与新能力一起再次添加。

确保只有在能力与您的期望不同(即条件不同)时才执行此操作,否则会显著降低性能!

 

删除角色

使用remove_role()删除角色。

function wporg_simple_role_remove() {
	remove_role( 'simple_role' );
}

// Remove the simple_role.
add_action( 'init', 'wporg_simple_role_remove' );

Alert:
在第一次调用remove_role()之后,角色及其能力将从数据库中删除!

连续调用将不起任何作用。

Note:
如果要删除默认角色:

  • 我们建议不要删除管理员和超级管理员角色!
  • 确保将代码保存在插件/主题中,因为未来的WordPress更新可能会再次添加这些角色。
  • 还需要运行
    update_option('default_role', YOUR_NEW_DEFAULT_ROLE)
    因为您将删除subscriber,这是WP的默认角色。

 

能力

能力定义了角色可以做什么和不能做什么:编辑文章、发布文章等。

Note:
自定义文章类型可能需要一组特定的能力。

 

新增能力

您可以为角色定义新能力。

使用get_role()获取角色对象,然后使用该对象的add_cap()方法添加新能力。

function wporg_simple_role_caps() {
	// Gets the simple_role role object.
	$role = get_role( 'simple_role' );

	// Add a new capability.
	$role->add_cap( 'edit_others_posts', true );
}

// Add simple_role capabilities, priority must be after the initial role definition.
add_action( 'init', 'wporg_simple_role_caps', 11 );

Note:
可以向任何角色添加自定义能力。

在默认的WordPress管理下,它们没有任何效果,但可以用于自定义管理界面和前端区域。

 

删除能力

您可以从角色中删除能力。

该实现类似于添加能力,不同之处在于对角色对象使用remove_cap()方法。

 

使用角色和能力

 

获取角色

使用get_role()获取包含其所有能力的角色对象。

get_role( $role );

 

用户可以...

检查用户是否具有指定的角色能力,使用user_can()

user_can( $user, $capability );

Warning:
有一个未记录的第三个参数$args,它可能包括应该对其执行测试的对象。

比如:传递文章ID来测试该特定文章的能力。

 

当前用户可以...

current_user_can()user_can()的封装函数,使用当前用户对象作为$user参数。

在后端和前端区域需要一定级别的权限才能访问和/或修改的场景中使用此选项。

current_user_can( $capability );

 

实例

下面是一个在模板文件中添加编辑链接的实际示例,前提是用户具有适当的能力:

if ( current_user_can( 'edit_posts' ) ) {
	edit_post_link( esc_html__( 'Edit', 'wporg' ), '<p>', '</p>' );
}

 

多站点

current_user_can_for_blog()函数用于测试当前用户在特定博客上是否具有特定的角色能力

current_user_can_for_blog( $blog_id, $capability );

 

参考

用户角色和能力的Codex参考。