不知道有多少人和汇站一样,在刚接触wordpress的时候,就被各种网络教程灌输了“如果能使用代码版本,就不需要插件”的理念。首先,基于这个概念,当文章的访问量,首先,我会寻找代码版本。网上提供的带有代码版本浏览频率统计功能的文章,名字相似,类似于“WordPress 非插件增加了文章浏览频率统计功能”,随处可见。
汇站应该是我在 wordpress 大学看到的教程,关于教程我就不赘述了。主要解决 CDN 开启后,通过这种代码版本流量统计的方式,浏览次数不会被刷新的问题。如果想组合使用,统计代码部分可以去 wordpress 大学阅读文章《WordPress 非插件添加文章浏览次数统计功能》。
第一,汇站实很早就意识到,CDN 开启后,其实页面浏览量并不是没有刷新,而是第一次缓存时只增加了一次。
因为 php 只会在第一次访问时执行,缓存后直接访问html,所以不会增加统计。所以解决问题的方法就是让 html 也统计浏览次数,而在之前的认知中只有一个方法:ajax。但是一开始汇站虽然知道问题的原因和解决方法,但是汇站的代码能力不强,当时无法解决。
汇站总认为,如果一个问题无论如何都解决不了,那就先放手吧。过一段时间,你可能会发现这个问题根本不算什么。当然,这个时间可能有点长,至少在 ajax 上,汇站等了一两年。。。。
Sen 首先想到了用 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 来限制访问次数无限制增加的问题。
转载请注明:汇站网 » 解决 WordPress 加入 CDN 后“非插件浏览次数统计”浏览次数不刷新问题