WordPress开启缓存后浏览量更新方法

WordPress

前言

当 WordPress 开启静态缓存或者使用 CDN 缓存后,当访问文章、分类及标签页面时,读取的是缓存后的页面,所以浏览量不会增加,只能重新生成缓存后才可以增加。

解决办法

网上搜索到了解决 WordPress 开启 CDN 缓存后文章浏览量不自增的问题,此篇文章解决了当缓存的时候文章页浏览量不更新的问题。

解决这个问题,我们可以通过 Ajax 来异步请求服务器,然后再进行文章的浏览数量自增或其他的操作。(注:本方法仅适用于使用了 WP-PostViews 插件或者和具有 WP-PostViews 相同字段的博客,若你的文章统计字段不同,可自行修改下方 SQL 语句以达到效果)

但最近为了查看所有页面的浏览量,不仅增加了文章页,同时也增加了分类页及标签页的浏览量。

最终根据解决 WordPress 开启 CDN 缓存后文章浏览量不自增的问题此篇文章增加了分类页及标签页的浏览量更新的问题。

文章页浏览量更新
在网站的根目录新建一个操作文件,命名为 views-single.php。

<?php
/**
 * @author Licoy.cn
 * @version 2017/8/8
 */
require('wp-blog-header.php'); //加载根目录下的 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); //views 为文章页的$meta_key,即自定义字段的键值
    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;
}

进行验证过滤(JavaScript 部分),代码如下:

<script type="text/javascript">
    $(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-single.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-single.php?time="+new Date().getTime(),{post_id:post_id});
                    localStorage.setItem("view_list",views+"|"+post_id);
                    return true;
                }
                return false;
            }
        }
    }
    page_views();
});
</script>

分类页及标签页浏览量更新
在 function.php 中增加以下代码:

// 输出当前页面的 ID
function the_pages_ID() {
    echo get_queried_object_id();
}

在网站的根目录新建一个操作文件,命名为 views-pages.php。

<?php
/**
 * @author Licoy.cn
 * @version 2017/8/8
 */
require('wp-blog-header.php');//加载根目录下的 wp-blog-header.php
$isXhr = $_SERVER['HTTP_X_REQUESTED_WITH'];
if (strtoupper($isXhr) == strtoupper("XMLHttpRequest")) {
    $post_id = $_POST['post_id'];
    $po = get_term_meta($post_id,'_views',true);//_views 为分类页及标签页的$meta_key,即自定义字段的键值
    if(!$po)  {
        //表示不存在这个自定义栏目,那么新增这个自定义栏目
        add_term_meta($post_id, '_views', 1, true);
        echo 1;
    } else {
        // 若已存在这个自定义栏目,则先获取当前数值,并递增+1,再更新数据库
        $count = $po + 1;
        update_term_meta($post_id,'_views',$count);
        echo $count;
    }
} else {
    header("Status: 403 Not Found");
    exit;
}

进行验证过滤(JavaScript 部分),代码如下:

<script type="text/javascript">
    $(function(){
    function page_views() {
        if(!window.localStorage) {
            console.info('浏览器不支持 localStorage');
        }else{
            var post_id = <?php the_pages_ID()?>;
            var views = localStorage.getItem("view_list");
            if(views===null){
                localStorage.setItem("view_list",post_id);
                $.post("/views-pages.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-pages.php?time="+new Date().getTime(),{post_id:post_id});
                    localStorage.setItem("view_list",views+"|"+post_id);
                    return true;
                }
                return false;
            }
        }
    }
    page_views();
});
</script>

JavaScript 部分代码部分可以放到对应的文章页、分类或标签页中,因为网站采用了不同的 footer 样式,所以对应到 single_footer 以及 pages_footer 中即可。到这一步,就已经成功解决了 WordPress 在缓存或者 CDN 的时候文章页、分类页及标签页的浏览量不自增的问题了。

© 声明:本站原创文章采用BY-NC-SA创作共用协议,转载时请标明本文地址;非原创(转载)文章版权归原作者所有。

RECENT POSTS

Stay Hungry. Stay Foolish.

数据库查询次数:11次,页面生成时间:0.033秒。