跳转到主要内容

角色和能力

角色和功能是 WordPress 的两个重要方面,可让您控制用户权限。

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

角色

角色定义了用户的一组能力。例如,用户可以在他的仪表板中看到什么和做什么。

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

  • 超级管理员
  • 行政人员
  • 编辑
  • 作者
  • 贡献者
  • 订户

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

添加角色

使用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' );
警报:第一次致电后add_role() ,角色及其功能将存储在数据库中!

 

顺序调用不会执行任何操作:包括更改功能列表,这可能不是您期望的行为。

笔记:要批量更改功能列表:使用以下命令删除角色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' );

警报:第一次致电后remove_role() ,角色及其功能将从数据库中删除!

连续调用不会执行任何操作。

笔记:如果您要删除默认角色:

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

 

能力

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

笔记:自定义帖子类型可能需要一组特定的功能。

添加功能

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

使用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 );

笔记:可以向任何角色添加自定义功能。

在默认的 WordPress 管理下,它们没有任何作用,但它们可用于自定义管理屏幕和前端区域。

删除功能

您可以删除角色的能力。

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

使用角色和能力

获取角色

使用get_role()获取角色对象,包括其所有功能。


get_role( $role );

用户可以

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


user_can( $user, $capability );

警告:有一个未记录的第三个参数 $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 );

参考

用户角色和能力的法典参考。