在一些以内容为主的网站上,经常会有一些内容需要用户具有一定的级别才能查看,比如我们经常说的VIP用户。在程序上,实现类似功能的逻辑很简单,就是判断一下当前用户的角色或者权限,如果当前用户为某种角色的用户,或者满足某些权限,就显示这些内容给用户,反之则隐藏。
WordPress为我们提供了相对完善的角色和权限系统,并提供了非常方便的API以方便我们添加自定义的角色和权限。今天我为大家简单的说明一下怎样通过WordPress的角色和权限API来添加用户角色,并限制某些内容只有VIP角色的用户才能访问。

基于现有角色新建 VIP 角色

我们可以通过WordPress的角色和权限API创建一个全新的用户角色,也可以通过复制现有角色,在现有角色的基础上创建一个新角色。因为我们需要新建的角色和WordPress内置的角色只是略有不同,在这里,为了减少代码量,我们选择通过复制现有角色的方式创建新角色。


// 新建VIP用户角色
add_action( 'admin_init', 'remove_shop_caps');
function remove_shop_caps() {

    // 首先获取订阅者角色。
    $subscriber = get_role('subscriber');

    // 然后基于订阅者角色的权限新建一个角色。
    $vip = add_role('vip','VIP用户',$subscriber->capabilities);
    $vip = get_role('vip');

    // 移除新角色的一些不需要的权限
    $vip->add_cap( 'read_vip_content' );
}

把上面的代码添加到主题的functions.php文件中,然后再到仪表盘的编辑用户界面中看看,“VIP用户” 这个角色已经出现在了用户角色选择的表单中。

创建只有 VIP 可以阅读的简码

创建了新的用户角色,我们接下来需要做的就是添加只有VIP角色用户才可以阅读的内容。我们通过简码的方式来实现这个功能。


/* 设置VIP可以阅读的简码 */
if ( ! function_exists( 'shortcode_vip_content' ) ) {
	function shortcode_vip_content( $atts ) {
		$default = array(
			'content' => 'VIP用户可以查看的内容。',
		);
		extract( shortcode_atts( $default, $atts ) );

		if ( current_user_can('read_vip_content') ){
			$retour = $content;
		} else {
			$retour = "你不是VIP,你不能查看这些内容。";
		}

		return $retour;

	}
}
add_shortcode( 'vip_content', 'shortcode_vip_content' );

添加只有VIP角色才可以阅读的文章时,我们只需要添加简码vip_content="只有VIP用户才可以阅读的内容"到文章中,即可实现简码中的内容对普通用户隐藏,对VIP用户可见的功能。为了方便操作,我们还可以通过shortcake插件添加简码UI到文章发布页面,不过这已经超过了本文的范围,在这里就不多说了。又兴趣的朋友可以自己尝试添加。