解决 WordPress 开启缓存后文章浏览量不自增

WordPress 静态缓存目前对于何先生来说作用不是很大,比较适合一些流量比较大的博客或者网站。
何先生之前接触过 WordPress 静态缓存,遇到过这个问题后面没有去深究。

正文:

WordPress 开启静态缓存页面之后,当我们访问文章的时候,便不会去请求源站,而是返回缓存或者 CDN 页面,所以文章的浏览数量不会进行自增。

解决办法

解决这个问题,我们可以通过 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>

完成。

转载请注明出处。
何先生 » 解决 WordPress 开启缓存后文章浏览量不自增
Loading...

发表评论

表情
图片 链接 代码

提供最优质的资源集合

立即查看 了解详情