现在的位置:首页>wordpress>正文

如何判断WordPress登录用户为管理员或是投稿者等其它角色

2017年01月06日 ⁄ 共 2094字 暂无评论

当您的wordpress网站中,为投稿人或者其它的角色设置了专用的席位后,有时候,我们在相关的一些功能中,可能会要进行判断,大多数时候,我们需要要根据不同角色拥有的权限来进行相关的操作,这里我们一起来看看如何判断WordPress登录用户为管理员或是投稿者,当然,也还有其它的相关的角色判断。

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)

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

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

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

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

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

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

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

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

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

用$current_user判断

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

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

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

  1. global $current_user;
  2. if$current_user->roles[0] == 'author' ) {
  3.     echo 'The current user is an author';
  4. }

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

  1. add_action( 'init', 'check_user_role' );
  2. function check_user_role() {
  3.     global $current_user;
  4.     if$current_user->roles[0] == 'author' ) {
  5.         echo 'The current user is an author';
  6.     }
  7. }

之所以要使用

  1. add_action( 'init', 'check_user_role' );

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

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

更简单的方法

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

  1. global $current_user;
  2. if(in_array( 'administrator', $current_user->roles )){
  3.     echo 'administrator';
  4. }

 

 

小结

文章内容来源自网络,由免费部落整理发布。

给我留言