在WordPress主题或者插件开发的过程中,经常要遇到判断登录用户的角色,并根据不同的用户角色赋予不同的权限。
下面是一下常用的判断方法。
一、使用 current_user_can() 判断
1 | current_user_can() 可以根据不同角色拥有的权限来判断用户角色,具体的用户权限,可以在Roles and Capabilities 中找到。 |
判断用户是否为编辑(Editor)
1 | if( current_user_can( 'publish_pages' ) && !current_user_can( 'manage_options' ) ) { |
判断用户是否为作者(Author)
1 | if( current_user_can( 'publish_posts' ) && !current_user_can( 'publish_pages' ) ) { |
判断用户是否为投稿者(Contributor)
1 | if( current_user_can( 'edit_posts' ) && !current_user_can( 'publish_posts' ) ) { |
判断用户是否为订阅者(Subscriber)
1 | if( current_user_can( 'read' ) && !current_user_can( 'edit_posts' ) ) { |
二、使用$current_user判断
$current_user是WordPress的一个全局变量,当用户登录后,这个里面就会有用户的角色和权限信息。
当WordPress的init action执行后,就可以安全的使用$current_user全局变量了。
在模板文件中判断登录用户是否为作者(Author)
1 | global $current_user; |
在functions.php中判断用户是否为作者(Author)
1 | add_action( 'init', 'check_user_role' ); |
之所以要使用
add_action( ‘init’, ‘check_user_role’ );
是因为$current_user这个全部变量到init action执行时才完成赋值,既然要读它的内容,至少要等到它的内容准备好后再读取。functions.php的代码先与init action执行,所以在functions.php中直接写global $current_user是无法获取用户信息的。
检查用户角色之前,还可以先检查一下用户是否登录
1 | <?php |
更简单的方法
还有一种更直接的方法,例如判断当前用户是否为管理员
1 | global $current_user; |
三、使用current_user_can这个函数来判断
(这个是我收集自网上的,应该和第一个和第二个有点区别)
current_user_can这个函数,这个函数用来判断当前用户是否具有某级别的权限。
看如下图表
这个图表展示了WordPress各个用户组所对应的级别,那么我们需要来判断是否为管理员,也就是Administrator
我们就用level_10。判断代码就如下
1 | if(current_user_can(‘level_10’)){ |
这样想判断其他级别的用户也就是换个级别就可以了。