使用網(wǎng)易新聞客戶端看新聞的朋友對網(wǎng)易新聞的新聞欄目訂閱功能都會比較熟悉。WordPress 有著非常強(qiáng)大并且方便的內(nèi)容管理界面,非常適合做一個新聞資訊類的網(wǎng)站。
如果你的網(wǎng)站上欄目非常多,提供一個訂閱功能,讓用戶只訂閱自己感興趣的欄目是非常有必要的,在幫一個客戶做 WordPress 新聞資訊主題的時候?qū)崿F(xiàn)過這樣的功能,抽空整理了一下其中的關(guān)鍵代碼,在這里分享給大家。

用戶中心訂閱功能的關(guān)鍵后臺代碼
/*訂閱功能*/
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提交獲取參數(shù)
//獲取當(dāng)前用戶id
$current_user = wp_get_current_user();
$uid = $current_user->ID;
//獲取當(dāng)前用戶訂閱的欄目數(shù)組(下稱訂閱數(shù)組)
$fids = get_user_meta($uid, 'fids', true);
if(count($fids) == 0){//如果訂閱數(shù)組長度為0,說明該用戶沒有訂閱任何欄目。
$fids = array($fid);
$msg = array(
'msg' => "訂閱成功",
'text' => "取消訂閱"
);
} else {//如果不為0,說明用戶已經(jīng)訂閱了一些欄目
if(!in_array($fid, $fids)){//如果當(dāng)前分類不在訂閱數(shù)組,添加當(dāng)前分類到訂閱數(shù)組,訂閱成功。
array_push($fids, $fid);
$msg = array(
'msg' => "訂閱成功",
'text' => "取消訂閱"
);
}else{//如果當(dāng)前分類在訂閱數(shù)組中,說明已經(jīng)訂閱過了,從訂閱數(shù)組中移除此分類id,取消訂閱成功
foreach($fids as $k => $v) {
if($v == $fid){
unset($fids[$k]);
}
}
$msg = array(
'msg' => "取消訂閱成功",
'text' => "訂閱欄目"
);
}
}
// 排除空數(shù)組
$following_ids = array_filter($following_ids, function ($value) { return $value !== ''; });
//最后,更新用戶訂閱,返回信息。
update_user_meta($uid, 'fids', $fids);
wp_send_json_success($msg);
}
訂閱功能的前臺關(guān)鍵代碼
前端直接把欄目 ID 寫到 HTML 里面,方便獲取。并根據(jù)用戶訂閱狀態(tài),判斷按鈕上面的文字是訂閱還是取消訂閱。
<?php $fids = (array)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){
if(data.success === true){
alert(data.data.msg);
}
window.location.reload()
}}
);
});
});

除了訂閱欄目,以上代碼稍作修改,我們還可以訂閱(關(guān)注)用戶,只需要把上面的分類 ID 修改為用戶 ID 就可以了。



訂閱以后,欄目中更新內(nèi)容是會給訂閱者發(fā)郵件通知嗎?還是顯示更新在作者的主頁?