描述
此函数还接受对象的ID,以检查该能力是否为meta能力。meta能力(如edit_post
和edit_user
)是map_meta_cap()
函数用来映射到用户或角色具有的基本能力(如,edit_posts
与edit_others_posts
)的能力。
用法示例:
current_user_can( 'edit_posts' ); current_user_can( 'edit_post', $post->ID ); current_user_can( 'edit_post_meta', $post->ID, $meta_key );
虽然部分支持针对特定角色而不是能力进行检查,但不鼓励这种做法,因为它可能会产生不可靠的结果。
注意:如果当前用户是超级管理员,则将始终返回true,除非明确拒绝。
另见
- WP_User::has_cap()
- map_meta_cap()
参数
- $capability
-
(string)(必填) 能力名称。
- $args
-
(mixed)(可选) 通常由对象ID开始的其他参数。
返回
(bool) 当前用户是否具有给定能力。如果$capability
是meta cap并且传递了$object_id
,则返回当前用户是否具有给定对象的给定meta能力。
源码
更新日志
版本 | 描述 |
---|---|
5.8.0 | 已转换为user_can()函数的封装器。 |
5.3.0 | 通过将现有的...$args 参数添加到函数签名中,将其形参化。 |
2.0.0 | 开始引入 |
使用示例
如果要检查两个以上的角色,可以检查当前用户的角色是否在角色数组中,如:
$user = wp_get_current_user(); $allowed_roles = array( 'editor', 'administrator', 'author' ); if ( array_intersect( $allowed_roles, $user->roles ) ) { // Stuff here for allowed roles }
如果当前用户不是管理员或没有管理权限,则隐藏管理员栏
if ( ! current_user_can( 'manage_options' ) ) { add_filter( 'show_admin_bar', '__return_false' ); }
参考:所有角色和功能的列表
注意:如果当前用户是超级管理员,则将始终返回true,除非明确拒绝。
这说明有点误导。使用
$user->add_cap( 'capability', false )
显式拒绝该能力将不起作用。明确拒绝超级管理员的能力的唯一方法是使用map_meta_cap filter返回do_not_allow
以检查该能力。检查当前用户是否可以使用特定的文章ID编辑文章:
if ( ! current_user_can( 'edit_post', $post_id ) ) { return false; }
旧Codex说current_user_can( $capability , $object_id );但本页标题中没有参数$object_id,即使它列在参数部分。