如果你的网站上栏目非常多,提供一个订阅功能,让用户只订阅自己感兴趣的栏目是非常有必要的,在帮一个客户做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就可以了。