0°

不同身份的用户,不同的权限-WordPress主题开发

比较实用的判断函数

官方文档:

用户角色和权限(有中文)

https://codex.wordpress.org/Roles_and_Capabilities

描述

WordPress使用角色概念,旨在让网站所有者能够控制用户在网站内可以做什么和不可以做什么。站点所有者可以通过为每个用户分配特定角色来管理用户对诸如撰写和编辑帖子创建页面定义链接创建类别审核评论管理插件管理主题以及管理其他用户等任务的访问权限。

WordPress有六个预定义的角色:超级管理员管理员编辑作者贡献者订阅者。允许每个角色执行一组称为“ 功能”的任务。有许多功能,包括“ publish_posts ”,“ moderate_comments ”和“ edit_users ”。为每个角色预先分配了一组默认功能,但可以使用add_cap()和 remove_cap()函数分配或删除其他功能。可以使用add_role()引入或删除新角色和remove_role()函数。

超级管理员角色允许用户执行所有可能的功能。每个其他角色的允许功能数量都在减少。例如,订阅者角色只具有“ 读取 ”功能。不应将一个特定角色视为另一个角色的高级角色。相反,请考虑角色定义用户在站点内的职责。

角色摘要

  • 超级管理员 – 有权访问网站管理功能和所有其他功能的人。请参阅创建网络文章。
  • 管理员slug:’administrator’) – 有权访问单个站点中的所有管理功能的人。
  • 编辑slug:’编辑’) – 可以发布和管理帖子的人,包括其他用户的帖子。
  • 作者slug:’author’) – 可以发布和管理自己帖子的人。
  • 贡献者slug:’贡献者’) – 可以编写和管理自己的帖子但无法发布它们的人。
  • 订阅者slug:’subscriber’) – 只能管理其个人资料的人。

安装WordPress后,将自动创建管理员帐户。

可以在“ 管理面板” > “设置” >“ 常规”中设置新用户的默认角色。

您可以通过访问全局WP_Roles对象的role_names属性(可以使用wp_roles()检索,或者在版本4.3之前使用全局$ wp_roles;)来查看所有已定义角色的列表。

角色

角色定义允许用户分配角色的一组任务。例如,超级管理员角色包括能够在内部进行一切可能的任务,网络虚拟的WordPress 网站。该管理员角色限制所允许的任务,只有那些影响一个站点。另一方面,Author角色只允许执行一小部分任务。


来源于:

https://www.solagirl.net/wordpress-get-current-user-role.html

过去判断登录用户的角色我喜欢用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'

你好,请问判断用户登录后再提供下载链接,这样如何操作?

if ( is_user_logged_in() ) {
    echo '登陆用户';
} else {
    echo '未登录用户!';
}

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

来源于:

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

实现方法

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

判断是否管理员

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

判断是否编辑

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

判断是否作者

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

判断是否投稿者

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

判断是否订阅者

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

根据权限判断角色

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

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 来做会员等级区分.

仅允许管理员可浏览

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

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

 endif; ?>endif; ?>

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

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

管理员可看到

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

编辑可看到

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

作者可看到

 elseif (current_user_can('level_2')) : ->

撰写者可看到

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

订阅者可看到

 else : ?-->

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

 endif; ?-->

显示不同权限的用户

https://www.zztheme.com/177.html

在数据库中,关于权限的字段位于数据库中 wp_usermeta 表中的 meta_value,所以这个判断函数可以这么写:

//以下为代码正文…
   
global $wpdb;
//显示管理员
$administrators = $wpdb->get_col("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'wp_user_level' AND meta_value = 10 ORDER BY user_id");
//显示管理员、编辑
$editors = $wpdb->get_col("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'wp_user_level' AND meta_value >= 7 ORDER BY user_id");
//显示管理员、编辑、作者
$authors = $wpdb->get_col("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'wp_user_level' AND meta_value >= 2 ORDER BY user_id");
//显示管理员、编辑、作者、投稿者
$contributors = $wpdb->get_col("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'wp_user_level' AND meta_value >= 1 ORDER BY user_id");
//显示管理员、编辑、作者、投稿者、订阅者
$subscribers = $wpdb->get_col("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'wp_user_level' AND meta_value >= 0 ORDER BY user_id");
//历遍显示输出所有相关用户的显示名称
foreach($administrators as $administrator){
    echo get_the_author_meta('display_name', $administrator).'
';
}
?>

以上示例中只输出权限最高的管理员用户,大家都自己发挥吧!注释都写明了相关的权限和角色。

拓展:

前台显示编辑链接-WordPress主题开发

042

因主题原因,在示例代码中,有部分
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论