WordPress 静态缓存目前对于何先生来说作用不是很大,比较适合一些流量比较大的博客或者网站。
之前接触过 WordPress 静态缓存,遇到过这个问题后面没有去深究。
WordPress缓存文章浏览量访问不自动增加修改正文
WordPress 开启静态缓存页面之后,当我们访问文章的时候,便不会去请求源站,而是返回缓存或者 CDN 页面,所以文章的浏览数量不会进行自增。
首先可以使用一个插件解决这种方法
答案是使用:安装WP-PostViews Plus插件
很容易吧,直接后台搜索WP-PostViews Plus,安装,然后启用就行了。
而且他兼容WP-PostViews插件,调用方式也一样:
在single.php你要显示统计的地方插入:
<?php if(function_exists('the_views')) { the_views(); } ?>
如果不使用插件实现可以使用下面的方法自己修改代码实现。
WordPress开启缓存后文章浏览量不增加解决办法
解决这个问题,我们可以通过 Ajax 来异步请求服务器,然后再进行文章的浏览数量自增或其他的操作。(注:本方法仅适用于使用了 WP-PostViews 插件或者和具有 WP-PostViews 相同字段的博客,若你的文章统计字段不同,可自行修改下方 SQL 语句以达到效果)
首先,我们在网站的根目录新建一个操作文件,命名为views.php,将以下代码写入此文件中。
<?php require('../../wp-blog-header.php'); $isXhr = $_SERVER['HTTP_X_REQUESTED_WITH']; if (strtoupper($isXhr) == strtoupper("XMLHttpRequest")) { $post_id = $_POST['post_id']; $po = get_post_meta($post_id,'views',true); if(!$po) { //表示不存在这个自定义栏目,那么新增这个自定义栏目 add_post_meta($post_id, 'views', 1, true); echo 1; } else { // 若已存在这个自定义栏目,则先获取当前数值,并递增+1,再更新数据库 $count = $po + 1; update_post_meta($post_id,'views',$count); echo $count; } } else { header("Status: 403 Not Found"); exit; }
在上述代码中,为了防止恶意请求,做了一个 Ajax 请求头的验证,验证是否为 xmlHttpRequest 请求,如果不是则返回 403 状态。
接着我们在主题的 page.php 文件中插入以下代码:
<script> $(function(){ function page_views() { if(!window.localStorage) { console.info('浏览器不支持 localStorage'); }else{ var post_id = <?php the_ID();?>; var views = localStorage.getItem("view_list"); if(views===null){ localStorage.setItem("view_list",post_id); $.post("/views.php?time="+new Date().getTime(),{post_id:post_id}); return true; }else{ var item = views.split("|"); var bool = $.inArray(post_id+'',item); if(bool===-1){ $.post("/views.php?time="+new Date().getTime(),{post_id:post_id}); localStorage.setItem("view_list",views+"|"+post_id); return true; } return false; } } } page_views(); }); </script>
完成。
官方QQ群号码:922069959