不知道有多少人和优站一样,在刚接触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来限制访问次数无限制增加的问题。