成航先森 成航先森

成都航院计算机系一个学生的个人记录

 

WordPress技巧

最新文章

WordPress技巧
当前位置: 首页 » 建站分享 » WordPress技巧 » 解决WordPress加入CDN后“非插件浏览次数统计”浏览次数不刷新问题

解决WordPress加入CDN后“非插件浏览次数统计”浏览次数不刷新问题

编辑:狂族晨曦 来源:WordPress技巧 日期:2017-08-25 阅读: 5,374 次 6 条评论 » 百度已收录

最后更新时间:2020-11-18

不知道多少人和先森一样,在最初接触wordpress的时候,被网上的各类教程灌输了“能用代码版,就不用插件”的概念。先森就本着这个概念,在文章的访问量的时候,先森就找的代码版。网上提供的代码版浏览次数统计功能的文章,名称都差不多,类似“WordPress非插件添加文章浏览次数统计功能”这种比比皆是。

先森应该是在wordpress大学看到的教程,关于教程先森就不再赘述了。本文主要解决的是,开启CDN后,用这种代码版访问量统计的方式浏览次数不再刷新的问题,如果想结合着来使用的话,统计代码部分可以去wordpress大学看《WordPress非插件添加文章浏览次数统计功能》这篇文章。

浏览次数

浏览次数

问题分析

先森其实很早就意识到,开启CDN后,其实浏览量不是不刷新,而是只在首次缓存的时候才会增加一次。

因为只有第一次访问的时候才会执行php,缓存后就直接访问的html了,所以就不会增加统计了。所以解决问题的方式,是让html也能统计到浏览次数,先森认知中的方法就只有一个:ajax。然而当初先森虽然知道问题原因,知道解决方式,但奈何先森代码能力不强,当时没能解决。

先森始终认为,一个问题如果死活解决不了,那么就先放放,过段时间再反顾可能就会发现,这个问题根本就不是事。当然,这个时间可能就有点久了,起码就ajax这个问题,先森等了一两年。。。。

先森想到的用ajax更新浏览次数的方法就是,使用ajax提交文章的ID给后方的php,后方的php接收到文章ID后,将该文章的浏览次数+1。

效果实现

先森研究了一晚上,发现要解决还是挺简单的。又是研究几小时,分享几分钟,心塞。

首先,在footer.php中添加ajax的代码,注意url的地址要改为自己的php路径:

<?php if  (is_singular()) : ?>
  <!-- ajax post view -->
  <!-- ajax post view -->
  <script type= "text/javascript" >
$.ajax({ 
type:'POST', 
url: "//www.capjsj.cn/wp-content/themes/*/*.php" ,   /*此处需要修改为自己的php路径*/
data: { 
"postviews_id" : "<?php the_ID();?>" 
} 
}); 
  </script>
<?php endif ; ?>

接收数据的php代码很简单,参考了评论的comments-ajax.php的头部,禁止直接访问,然后加上了几行更新浏览量的代码。将下面内容保存到一个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,文章页面变成了静态页面,后台也会更新访问次数了。

总结

这样仅仅是解决了文章页面被缓存后,浏览次数无法被统计到的问题,但是还并不完善。

上面的功能实现之后,你会发现,每一次刷新浏览次数都会加一,如果有人一直按着F5,那么增加的浏览次数就有点恐怖了。这样还会增加服务器的负担,像先森这种把网站放在阿里云虚拟主机的,若负载过量还会直接关停,被人这样搞的关机先森就哭了。

所以,下篇文章先森会分享使用cookies来限制访问次数无限增加的问题。

另外,除了访问量持续增加的问题,还有一个地方可以优化。既然ajax能够异步提交数据,那么能不能动态的修改文章中的浏览次数呢?答案是肯定的,先森也会在下一篇文章中更新。

关于上面的问题,请查看下一篇文章:CDN后用Ajax动态提交、显示文章阅读量,cookies避免重复刷新

历史上的今天:

标签:
除特别注明外,本站所有文章均为成航先森 www.capjsj.cn 原创,本文共2002个字
转载请注明出处来自https://www.capjsj.cn/ajax_views.html
已有 6 位"计工"发布了激烈的评论,还有N多人围观笑而不语评论
的头像
欢迎发表评论
取消评论

表情
疑问调皮伤心抠鼻黑线微笑可爱奸笑震惊吓到了撇嘴大兵忍不住笑笑狂骂狂怒噢?鼓掌酷⊙﹏⊙b汗鄙视大哭嘿嘿

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. 的头像

    世间博客不少,风景这边独好!

    2017-08-28 16:52 回复
  2. 的头像

    还是老老实实用插件吧,计数插件小。

    2017-08-30 00:01 回复
  3. 的头像

    感谢分享实用信息

    2017-09-15 10:26 回复
  4. 的头像

    支持楼主

    2017-09-28 18:18 回复
  5. 的头像

    有一个问题哦,当访问的不是缓存内容时,刷新一次,阅读量会+2

    2018-03-12 01:44 回复
    • 博主的Gravatar 头像

      @分享喵: 关于这个问题,我已经在下一篇文章中发布了解决办法。下一篇的文章链接我已经添加在本文末尾,你可以刷新查看。如果还是有CDN缓存的话,你可以点击评论区上面的“下一篇”查看。

      2018-03-12 10:11 回复
官方微信
发表评论 返回顶部