解決WordPress加入CDN后“非插件瀏覽次數(shù)統(tǒng)計”瀏覽次數(shù)不刷新問題
編輯:狂族晨曦 來源:WordPress技巧 日期:2017-08-25 閱讀: 6,097 次 6 條評論 » 百度已收錄
不知道多少人和先森一樣,在最初接觸wordpress的時候,被網(wǎng)上的各類教程灌輸了“能用代碼版,就不用插件”的概念。先森就本著這個概念,在文章的訪問量的時候,先森就找的代碼版。網(wǎng)上提供的代碼版瀏覽次數(shù)統(tǒng)計功能的文章,名稱都差不多,類似“WordPress非插件添加文章瀏覽次數(shù)統(tǒng)計功能”這種比比皆是。
先森應(yīng)該是在wordpress大學(xué)看到的教程,關(guān)于教程先森就不再贅述了。本文主要解決的是,開啟CDN后,用這種代碼版訪問量統(tǒng)計的方式瀏覽次數(shù)不再刷新的問題,如果想結(jié)合著來使用的話,統(tǒng)計代碼部分可以去wordpress大學(xué)看《WordPress非插件添加文章瀏覽次數(shù)統(tǒng)計功能》這篇文章。

瀏覽次數(shù)
問題分析
先森其實很早就意識到,開啟CDN后,其實瀏覽量不是不刷新,而是只在首次緩存的時候才會增加一次。
因為只有第一次訪問的時候才會執(zhí)行php,緩存后就直接訪問的html了,所以就不會增加統(tǒng)計了。所以解決問題的方式,是讓html也能統(tǒng)計到瀏覽次數(shù),先森認知中的方法就只有一個:ajax。然而當初先森雖然知道問題原因,知道解決方式,但奈何先森代碼能力不強,當時沒能解決。
先森始終認為,一個問題如果死活解決不了,那么就先放放,過段時間再反顧可能就會發(fā)現(xiàn),這個問題根本就不是事。當然,這個時間可能就有點久了,起碼就ajax這個問題,先森等了一兩年。。。。
先森想到的用ajax更新瀏覽次數(shù)的方法就是,使用ajax提交文章的ID給后方的php,后方的php接收到文章ID后,將該文章的瀏覽次數(shù)+1。
效果實現(xiàn)
先森研究了一晚上,發(fā)現(xiàn)要解決還是挺簡單的。又是研究幾小時,分享幾分鐘,心塞。
首先,在footer.php中添加ajax的代碼,注意url的地址要改為自己的php路徑:
<?php if (is_singular()) : ?>
<!-- ajax post view -->
<!-- ajax post view -->
<script type= "text/javascript" >
$.ajax({
type:'POST',
url: "//www.cnidcc.cn/wp-content/themes/*/*.php" , /*此處需要修改為自己的php路徑*/
data: {
"postviews_id" : "<?php the_ID();?>"
}
});
</script>
<?php endif ; ?>
接收數(shù)據(jù)的php代碼很簡單,參考了評論的comments-ajax.php的頭部,禁止直接訪問,然后加上了幾行更新瀏覽量的代碼。將下面內(nèi)容保存到一個php文件中,放入自己的wordpress主題里面,將該php的訪問鏈接加入到上面的url中:
<?php
//禁止直接訪問本php
if ( 'POST' != $_SERVER['REQUEST_METHOD'] ) {
header('Allow: POST');
header('HTTP/1.1 405 Method Not Allowed');
header('Content-Type: text/plain');
exit;
}
require( dirname(__FILE__) . '/../../../wp-load.php' );
nocache_headers();
$post_ID = $_POST['postviews_id'];
$post_views = (int)get_post_meta($post_ID, 'views', true);
update_post_meta($post_ID, 'views', ($post_views+1));
?>
如此一來,即使加入了CDN,文章頁面變成了靜態(tài)頁面,后臺也會更新訪問次數(shù)了。
總結(jié)
這樣僅僅是解決了文章頁面被緩存后,瀏覽次數(shù)無法被統(tǒng)計到的問題,但是還并不完善。
上面的功能實現(xiàn)之后,你會發(fā)現(xiàn),每一次刷新瀏覽次數(shù)都會加一,如果有人一直按著F5,那么增加的瀏覽次數(shù)就有點恐怖了。這樣還會增加服務(wù)器的負擔,像先森這種把網(wǎng)站放在阿里云虛擬主機的,若負載過量還會直接關(guān)停,被人這樣搞的關(guān)機先森就哭了。
所以,下篇文章先森會分享使用cookies來限制訪問次數(shù)無限增加的問題。
另外,除了訪問量持續(xù)增加的問題,還有一個地方可以優(yōu)化。既然ajax能夠異步提交數(shù)據(jù),那么能不能動態(tài)的修改文章中的瀏覽次數(shù)呢?答案是肯定的,先森也會在下一篇文章中更新。
關(guān)于上面的問題,請查看下一篇文章:CDN后用Ajax動態(tài)提交、顯示文章閱讀量,cookies避免重復(fù)刷新
歷史上的今天:
轉(zhuǎn)載請注明出處來自http://www.cnidcc.cn/ajax_views.html

川公網(wǎng)安備 51011202000104號
世間博客不少,風(fēng)景這邊獨好!
還是老老實實用插件吧,計數(shù)插件小。
感謝分享實用信息
支持樓主
有一個問題哦,當訪問的不是緩存內(nèi)容時,刷新一次,閱讀量會+2
@分享喵: 關(guān)于這個問題,我已經(jīng)在下一篇文章中發(fā)布了解決辦法。下一篇的文章鏈接我已經(jīng)添加在本文末尾,你可以刷新查看。如果還是有CDN緩存的話,你可以點擊評論區(qū)上面的“下一篇”查看。