角色和能力
角色和能力是 WordPress 的两个重要方面,可让您控制用户权限。
WordPress 将 Roles 及其 Capabilities 存储在keyoptions
下的表中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)
,因为您将删除subscriber
WP 的默认角色。
能力
能力定义角色可以做什么和不能做什么:编辑帖子、发布帖子等。
笔记:
自定义帖子类型可能需要一组特定的功能。
添加功能
您可以为角色定义新的能力。
使用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 );
参考
用户角色和能力的法典参考。