0°

WordPress:如何判断登录用户的角色

比较重要的判断函数

来源于:

WordPress:如何判断登录用户的角色

过去判断登录用户的角色我喜欢用current_user_can(),比如判断当前用户是否是作者用current_user_can(‘author’),记得WordPress官方文档中给的例子也是这样用,不过今天看了一下文档,貌似用法变了,传递角色作为参数不再可靠,正确的用法是传递$capability,那么该如何判断用户角色呢?

 

注:以下内容在WP 3.4+上测试通过

current_user_can()的正确用法

current_user_can()文档中有一句话要注意一下

Do not pass a role name to current_user_can(), as this is not guaranteed to work correctly.

意思是说传递用户角色名称(如author、contributor)作为参数不能100%保证返回正确的结果,正确的用法是传递$capability,从这个函数的表面意思看,参数是权限比参数是角色名称更靠谱。

所以,要根据不同角色拥有的权限来判断用户角色,用户权限可以在Roles and Capabilities中找到。

判断用户是否为管理员(Administrator)

if( current_user_can( 'manage_options' ) ) {
    echo 'The current user is a administrator'; 
}

判断用户是否为编辑(Editor)

if( current_user_can( 'publish_pages' ) && !current_user_can( 'manage_options' ) ) {
    echo 'The current user is an editor'; 
}

判断用户是否为作者(Author)

if( current_user_can( 'publish_posts' ) && !current_user_can( 'publish_pages' ) ) {
    echo 'The current user is an author'; 
}

判断用户是否为投稿者(Contributor)

if( current_user_can( 'edit_posts' ) && !current_user_can( 'publish_posts' ) ) {
    echo 'The current user is a contributor'; 
}

判断用户是否为订阅者(Subscriber)

if( current_user_can( 'read' ) && !current_user_can( 'edit_posts' ) ) {
    echo 'The current user is a subscriber'; 
}

用$current_user判断

$current_user是WordPress的一个全局变量,当用户登录后,这个里面就会有用户的角色和权限信息。

当WordPress的init action执行后,就可以安全的使用$current_user全局变量了。

在模板文件中判断登录用户是否为作者(Author)

global $current_user;
if( $current_user->roles[0] == 'author' ) {
    echo 'The current user is an author';
}

在functions.php中判断用户是否为作者(Author)

add_action( 'init''check_user_role' );
 
function check_user_role() {
    global $current_user;
    if( $current_user->roles[0] == 'author' ) {
        echo 'The current user is an author';
    }
}

之所以要使用

add_action( 'init''check_user_role' );

是因为$current_user这个全部变量到init action执行时才完成赋值,既然要读它的内容,至少要等到它的内容准备好后再读取。functions.php的代码先与init action执行,所以在functions.php中直接写global $current_user是无法获取用户信息的。详细信息可以参考《WordPress Actions加载顺序》。

检查用户角色之前,还可以先检查一下用户是否登录

      if( is_user_logged_in() ) {
          //用户已登录,检查用户角色
      }
?>

更简单的方法

还有一种更直接的方法,例如判断当前用户是否为管理员

global $current_user;
if(in_array( 'administrator', $current_user->roles )){
    echo 'administrator'

WordPress判断用户等级显示相应内容

来源于:

https://blog.epinv.com/post/675.html

实现方法

<?php if( !current_user_can('administrator') ) {
echo '这段文字在非管理员角色才会显示,因为判断函数前加了感叹号。';
}?>

判断是否管理员

<?php if( current_user_can('administrator') ) {
echo '这段文字只会在“管理员”角色登录后显示。';
}?>

判断是否编辑

<?php if( current_user_can('editor') ) {
echo '这段文字只会在“编辑”角色登录后显示。';
}?>

判断是否作者

<?php if( current_user_can('author') ) {
echo '这段文字只会在“作者”角色登录后显示。';
}?>

判断是否投稿者

<?php if( current_user_can('contributor') ) {
echo '这段文字只会在“投稿者”角色登录后显示。';
}?>

判断是否订阅者

<?php if( current_user_can('subscriber') ) {
echo '这段文字只会在“订阅者”角色登录后显示。';
}?>

根据权限判断角色

有些时候因为某些原因用户角色权限会被修改,所以这个时候再用以上代码直接判断用户角色可能就实现不到我们想要的功能了,但我们还可以通过区分权限来区分角色。

<?php
if( current_user_can( ‘manage_options’ ) )
{ echo ‘这段文字只会在“管理员”角色登录后显示。’; }
if( current_user_can( ‘publish_pages’ ) && !current_user_can( ‘manage_options’ ) )
{ echo ‘这段文字只会在“编辑”角色登录后显示。’; }
if( current_user_can( ‘publish_posts’ ) && !current_user_can( ‘publish_pages’ ) )
{ echo ‘这段文字只会在“作者”角色登录后显示。’; }
if( current_user_can( ‘edit_posts’ ) && !current_user_can( ‘publish_posts’ ) )
{ echo ‘这段文字只会在“投稿者”角色登录后显示。’; }
if( current_user_can( ‘read’ ) && !current_user_can( ‘edit_posts’ ) )
{ echo ‘这段文字只会在“订阅者”角色登录后显示。’; }
?>

WordPress 会员等级

首先先来了解WordPress会员的等级区分:

管理者:Administrator: level 10

编辑:Editor: Level 7

作者:Author: Level 4

撰写人员:Contributor: Level 2

订阅者:Subscriber: Level 0

一般访客(非会员): Level 在 0 以下

以下将使用官方提供的函数: current_user_can 来做会员等级区分.

仅允许管理员可浏览

<?php global $user_ID; if( $user_ID ) : ?>
<?php if( current_user_can('level_10') ) : ?>

这里显示的内容为管理员可以看到的.

<?php endif; ?>
<?php endif; ?>

依照会员等级显示不同的内容

<?php if (current_user_can('level_10')) : ?>

管理员可看到

<?php elseif (current_user_can('level_7')) : ?>

编辑可看到

<?php elseif (current_user_can('level_4')) : ?>

作者可看到

<?php elseif (current_user_can('level_2')) : ->

撰写者可看到

<?php elseif (current_user_can('level_0')) : ?>

订阅者可看到

<?php else : ?-->

一般非会员(未登入者)可看到

<?php endif; ?-->

拓展:

管理员登陆显示编辑文本-WordPress主题开发

012

你也有好的想法?点击右下角的“灯泡”,开始你的创作。与我们一起,让生活更愉悦,让工作更高效,让世界更美好!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论