每周获取最新的 Wordpress 资源

如何使用 WordPress 制作一个会员网站(一):创建自定义用户组

会员功能对于想做生意的网站来说,是非常重要的,根据会员的等级,来区分查看特定内容的权限,在传统中的博客站点,会员机制并不重要,通常都会关闭注册功能,但是从 WordPress 2016 年底的最后一次更新来看,Wordpress 在逐渐脱离博客这个词,而且 WordPress 的功能和扩展机制,让它已经可以做任意想做的站点了,甚至可以做手机 APP。

这篇文章介绍一下在网站主题中如何针对不同的会员等级显示不同的页面或内容,以及如何创建一个自定义的会员角色。

WordPress 过时的 User Levels 等级系统

我们从官方文档可得知,自从 WordPress 1.5 开始使用 User Levels 等级系统,默认一共有 10 个用户等级,分别对应的角色如下:

  • User Level 0 将转换为 订阅者(Subscriber)
  • User Level 1 将转换为 投稿者(Contributor)
  • User Level 2 将转换为 作者(Author)
  • User Level 3 将转换为 编辑(Editor)
  • User Level 4 将转换为 编辑(Editor)
  • User Level 5 将转换为 编辑(Editor)
  • User Level 6 将转换为 编辑(Editor)
  • User Level 7 将转换为 编辑(Editor)
  • User Level 8 将转换为 管理者(Administrator)
  • User Level 9 将转换为 管理者(Administrator)
  • User Level 10 将转换为 管理者(Administrator)

然后在 WordPress 2.0 的时候开始使用更好和更灵活的 Roles and Capabilities 会员系统代替,为了保持向后兼容性,User Levels 等级系统依然保留着,然而在 WordPress 3.0 之后已经不再推荐使用 User Level。

所以,你可以了解下 User Levels 的历史,但是最好不要在你的插件或主题中使用了,迟早要被移除。

WordPress 推荐的 Roles and Capabilities 会员系统

不同于 User Levels,Roles and Capabilities 强调的不再是一个一个划分好的等级,而是分为 用户角色(Role)和该角色可以做到的事情(Capability),然后两者可以灵活组合,形成各种不同权限的用户组。

WordPress 默认有哪些用户组,以及这些用户组可以做什么呢?

  • 超级管理员(Super Admin) —— create_sites,delete_sites,manage_network,manage_sites,manage_network_users,manage_network_plugins,manage_network_themes,manage_network_options
  • 管理员(Administrator),不同于上一条和下一条所指的管理员,这里泛指所有管理员的共同点 —— activate_plugins,delete_others_pages,delete_others_posts,delete_pages,delete_posts,delete_private_pages,delete_private_posts,delete_published_pages,delete_published_posts,edit_dashboard,edit_others_pages,edit_others_posts,edit_pages,edit_posts,edit_private_pages,edit_private_posts,edit_published_pages,edit_published_posts,edit_theme_options,export,import,list_users,manage_categories,manage_links,manage_options,moderate_comments,promote_users,publish_pages,publish_posts,read_private_pages,read_private_posts,read,remove_users,switch_themes,upload_files,customize,delete_site
  • 非多站点模式的管理员(Additional Admin Capabilities) —— update_core,update_plugins,update_themes,install_plugins,install_themes,upload_plugins,upload_themes,delete_themes,delete_plugins,edit_plugins,edit_themes,edit_files,edit_users,create_users,delete_users,unfiltered_html
  • 编辑(Editor) —— delete_others_pages,delete_others_posts,delete_pages,delete_posts,delete_private_pages,delete_private_posts,delete_published_pages,delete_published_posts,edit_others_pages,edit_others_posts,edit_pages,edit_posts,edit_private_pages,edit_private_posts,edit_published_pages,edit_published_posts,manage_categories,manage_links,moderate_comments,publish_pages,publish_posts,read,read_private_pages,read_private_posts,unfiltered_html,upload_files
  • 作者(Author) —— delete_posts,delete_published_posts,edit_posts,edit_published_posts,publish_posts,read,upload_files
  • 投稿者(Contributor) —— delete_posts,edit_posts,read
  • 订阅者(Subscriber) —— read

那么问题又来了,我们该如何判断一个用户属于哪个用户组呢?可以使用官方提供的函数 current_user_canuser_can 来做判断,举个例子:

<?php
if( current_user_can( 'mange_options' ){
    echo "所有管理员才可以看到的内容";
}
?>

// user_can() 实例
<?php
$current_user = wp_get_current_user();
$user_id = $current_user->ID;
if( user_can( $user_id, 'mange_options' ) ) {
    echo "所有管理员才可以看到的内容";
}

?> 

很显然只有管理员才有 mange_options 这项能力,因此可以用这段代码判断是否是管理员用户组。

更多这方面内容,可以查看官方文档 Roles and Capabilities

自定义用户角色(Role)和用户能力(capability)

默认的用户组显然对于一个商业网站是不够用的。那么我们如何自定义呢?

创建新用户角色以及用户角色所拥有的能力 add_role()

WordPress 提供函数 add_role() 来帮助我们创建一个新的用户角色,用法如下:

<?php add_role( $role, $display_name, $capabilities ); ?> 

参数解释:

  • $role,字符串,自定义的角色名称
  • $display_name,字符串,自定义的角色显示名
  • $capabilities,数组,可选参数,用户能力列表

如果创建成功,就会返回一个 WP_Role 对象,那么创建不成功是什么情况呢?就是这个用户组已经存在了,就会返回 null

删除一个用户组,可以使用 remove_role(),就不赘述了。

给用户组添加用户能力 add_cap()

WordPress 提供函数 add_cap() 来给一个用户组或者某个用户添加用户能力。

首先看下给一个用户组添加能力:

// gets the author role
$role = get_role( 'author' );

// This only works, because it accesses the class instance.
// would allow the author to edit others' posts for current theme only
$role->add_cap( 'edit_others_posts' ); 

然后看下给一个用户添加能力:

$user = new WP_User( $user_id );
$user->add_cap( 'can_edit_posts' );

值得注意的是,这项设置是直接存入数据库中的,效果是持久的。除非使用 remove_cap() 撤销这项设置。

总结

自定义一个用户组讲完了,那么我们如果要调用我们创建的新用户组信息,或者我们想查看一个用户的所在的用户组以及权限,又该怎么办呢?我们将在下一篇继续探讨。

You May Also Like

About the Author: ted

发表评论

电子邮件地址不会被公开。 必填项已用*标注