当前浏览:首页 / WordPress函数 / current_user_can()

current_user_can( string $capability, mixed $args )

返回当前用户是否具有指定的能力

can

current

usermore...


描述

此函数还接受对象的ID,以检查该能力是否为meta能力。meta能力(如edit_postedit_user)是map_meta_cap()函数用来映射到用户或角色具有的基本能力(如,edit_postsedit_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,除非明确拒绝。

另见


参数

$capability

(string)(必填) 能力名称。

$args

(mixed)(可选) 通常由对象ID开始的其他参数。


返回

(bool) 当前用户是否具有给定能力。如果$capability是meta cap并且传递了$object_id,则返回当前用户是否具有给定对象的给定meta能力。



源码

查看源码 官方文档


更新日志

版本描述
5.8.0已转换为user_can()函数的封装器。
5.3.0通过将现有的...$args参数添加到函数签名中,将其形参化。
2.0.0开始引入

使用示例

  • 示例1

    如果要检查两个以上的角色,可以检查当前用户的角色是否在角色数组中,如:

    $user = wp_get_current_user();
    $allowed_roles = array( 'editor', 'administrator', 'author' );
    if ( array_intersect( $allowed_roles, $user->roles ) ) {
       // Stuff here for allowed roles
    }
  • 示例2

    如果当前用户不是管理员或没有管理权限,则隐藏管理员栏

    if ( ! current_user_can( 'manage_options' ) ) {
    	add_filter( 'show_admin_bar', '__return_false' );
    }
  • 示例3
  • 示例4

    注意:如果当前用户是超级管理员,则将始终返回true,除非明确拒绝。

    这说明有点误导。使用$user->add_cap( 'capability', false )显式拒绝该能力将不起作用。明确拒绝超级管理员的能力的唯一方法是使用map_meta_cap filter返回do_not_allow以检查该能力。

  • 示例5

    检查当前用户是否可以使用特定的文章ID编辑文章:

    if ( ! current_user_can( 'edit_post', $post_id ) ) {
       return false;
    }
  • 示例6

    旧Codex说current_user_can( $capability , $object_id );但本页标题中没有参数$object_id,即使它列在参数部分。