如果你的网站上栏目非常多,提供一个订阅功能,让用户只订阅自己感兴趣的栏目是非常有必要的,在帮一个客户做WordPress新闻资讯主题的时候实现过这样的功能,抽空整理了一下其中的关键代码,在这里分享给大家。

用户中心订阅功能后台代码


/*订阅功能*/
add_action( 'wp_ajax_skill_exchange', 'ajax_skill_exchange' );
add_action( 'wp_ajax_nopriv_skill_exchange', 'ajax_skill_exchange' );
function ajax_skill_exchange() {

	$fid = $_POST['fid']; // 为ajax提交获取参数

    //获取当前用户id
	$current_user = wp_get_current_user();
	$uid = $current_user->ID;

    //获取当前用户订阅的栏目数组(下称订阅数组)
	$fids = get_user_meta($uid, 'fids', true);

	if(count($fids) == 0){//如果订阅数组长度为0,说明该用户没有订阅任何栏目。
		$fids = array($fid);
		$msg = array(
			'msg' => "订阅成功",
			'text' => "取消订阅"
		);
	} else {//如果不为0,说明用户已经订阅了一些栏目
		if(!in_array($fid, $fids)){//如果当前分类不在订阅数组,添加当前分类到订阅数组,订阅成功。
			array_push($fids, $fid);
			$msg = array(
				'msg' => "订阅成功",
				'text' => "取消订阅"
			);
		}else{//如果当前分流在订阅数组中,说明已经订阅过了,从订阅数组中移除此分类id,取消订阅成功
			foreach($fids as $k => $v) {
				if($v == $fid){
					unset($fids[$k]);
				}
			}
			$msg = array(
				'msg' => "取消订阅成功",
				'text' => "订阅栏目"
			);
		}
	}

    //最后,更新用户订阅,返回信息。
	update_user_meta($uid, 'fids', $fids);
	echo json_encode($msg);
	die(); //停止执行
}

订阅功能的前台代码

前端直接把栏目id写到html里面,方便获取。并根据用户订阅状态,判断按钮上面的文字是订阅还是取消订阅。


<?php $fids = get_user_meta($uid, 'fids', true); ?>
<?php foreach($wp_query as $q) {
    <a class="exchange" href="" data-id="<?php echo $q->ID ?>" title=""><?php echo(!in_array($q->ID, $fids)) ? "订阅" : "取消订阅"; ?></a>
<?php } ?>

前端通过Ajax提交需要订阅的栏目ID到后端。


jQuery(document).ready(function($) {
	/*订阅和取消订阅*/
	$('.exchange').click(function(){
		event.preventDefault();
		$.ajax({
		method: 'POST',
			url: ajax_object.ajaxurl,
			dataType: "json",
			data: {
				action: 'skill_exchange',
				fid: $(this).data("id")
			},
			success: function(data){
				alert(data.msg);
				window.location.reload()
			}}
		);
	});
});

除了订阅栏目,以上代码稍作修改,我们还可以订阅(关注)用户,只需要把上面的分类id修改为用户id就可以了。