WordPress 判断登录用户角色为管理员/编辑/作者/作者和订阅者的办法

开发 WordPress 主题和插件时,如果需要判断登录用户的角色并赋予不同的权限,常用的办法有使用 current_user_can() 判断和使用 $current_user 判断,可以根据业务需求来选择使用。

一:使用 current_user_can() 判断

//判断用户是否为管理员(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 是无法获取用户信息的。

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

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

更简单的方法

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

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

专题:WordPress 登录角色判断

相关推荐

WordPress 判断管理员登录的两种办法

WordPress 判断管理员登录的两种办法

WordPress 二次开发时,后台程序要验证管理员是否登录,以确保系统安全,is_admin() 和 current_user_can() 均可达到验证目的,但是需要注意 is_admin() 在某些情况下并不适用。 1、使用is_admin()函数 通常情况下,使用is_admin()函数,便可验证当前用户是否管理员了。 使用方法: if (is_admin()){ //验证成功 }else{ // ...

WordPress 判断指定ID或当前登录用户是否为管理员权限

WordPress 判断指定ID或当前登录用户是否为管理员权限

WordPress 判断指定 id 的用户是不是管理员,以及判断当前登录用户是不是管理员的办法如下 判断指定id的用户是不是管理员 该需求实现起来非常简单,几行代码搞定,分享一下: function ludou_is_administrator($user_id) { $user = get_userdata($user_id); if(!empty($user->roles) && in_array('administrator', $user->r ...

WordPress 函数:esc_html()将符号标签编码转义为HTML实体

WordPress 函数:esc_html()将符号标签编码转义为HTML实体

esc_html() 的作用,是把各种字符转义成 HTML 实体,如 < > & " '(小于号,大于号,&,双引号,单引号)等,如果已经是 HTML 实体的字符则不会再转义。 通过该函数就可以输出完整的字符串,即使字符串带有 HTML 标签,如 字体加粗,而不仅仅是加粗后的 字体加粗 四个文字。 此函数与 esc_attr 类似。 代码结构 用法: 参数 ...

获取 WordPress 路径和 URl 地址的函数大全

获取 WordPress 路径和 URl 地址的函数大全

为了 WordPress 更快的运行直接写了绝对地址,其实是不好的,如果修改了 WordPress 程序的地址,编写的这个插件或者是主题就只有你自己用,别人无法使用,为了避免错误,了解 WordPress 中与获取路径相关的函数很重要。 本文主要总结了:站点路径相关函数/主题路径相关函数/插件路径相关函数和路径相关常量,以下均假设 Wor ...

微信扫一扫,分享到朋友圈

WordPress 判断登录用户角色为管理员/编辑/作者/作者和订阅者的办法