惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
C
Check Point Blog
博客园_首页
B
Blog
D
Docker
U
Unit 42
量子位
I
InfoQ
有赞技术团队
有赞技术团队
Martin Fowler
Martin Fowler
GbyAI
GbyAI
L
LangChain Blog
云风的 BLOG
云风的 BLOG
博客园 - Franky
美团技术团队
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
Vercel News
Vercel News
Recent Announcements
Recent Announcements
雷峰网
雷峰网
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Google DeepMind News
Google DeepMind News

落羽日记

无题杂记 囚笼 吐槽 怎么放下对爱情的执念? 我们·在夏天·相遇·也分开 今天我们来讲三观 2023,我站在命运和时间的十字路口(更新中) (转载)用奋斗擦亮青春底色 生在红旗下,长在春风里
关于WordPress开启CDN后浏览量不增加
君 落羽 · 2023-07-05 · via 落羽日记

自从去年年底给全站开启了CDN缓存,所有发布的新帖子的浏览量基本都是个位数,甚是寒颤,毕竟以前浏览量都是大几百的,于是乎,改一下程序吧,记录一下坑。

因为统计代码在PHP程序里面,但是CDN之后,都缓存了HTML文件,访问只访问HTML,不访问源站,不请求PHP文件,所以不增加访问量。

原来统计浏览量的方法由主题文件提供,那我们可以用Ajax来异步请求,同时使用cookies来限制访问次数无限增加的问题,最后让ajax获取后台的访问量,修改前台显示的访问量,就可以了。

(其实我没太搞懂,但是可以参考大佬的做法,来源>>>>>成航先生

解决WordPress加入CDN后“非插件浏览次数统计”浏览次数不刷新问题

CDN后用Ajax动态提交、显示文章阅读量,cookies避免重复刷新

首先在footer.php中添加ajax的代码,注意需要将前台显示访问量的标签ID或class名称改成自己的。

<script type= "text/javascript" > 
function GetCookie(sName) {
    var arr = document.cookie.match(new RegExp("(^| )"+sName+"=([^;]*)(;|$)"));
    if(arr !=null){return unescape(arr[2])};
    return null;
}
var postviews_cook=GetCookie("postviews<?php the_ID();?>");
  if ( postviews_cook == null ){
$.ajax({ type:'POST', url: "<?php echo admin_url('admin-ajax.php');?>" , data:"postviews_id=<?php the_ID();?>&action=postviews",
cache:false,success: function(postviews_count){ $("#views").text('阅读:' + postviews_count + ' 次');document.cookie="postviews<?php the_ID();?>=" + postviews_count;} }); 
  }
  else{
$("#views").text('阅读:' + postviews_cook + ' 次');
};
 </script>
<?php endif ; ?>

然后直接在自己主题的functions.php中添加下面的代码:

/*
* 缓存时更新浏览量-有缓存
* //www.capjsj.cn/ajax_cookies_views.html
*/
function postviews_cache(){
    if( empty( $_POST['postviews_id'] ) ) return;
        $post_ID = $_POST['postviews_id'];
        if( $post_ID > 0 ) {
                $post_views = (int)get_post_meta($post_ID, 'views', true);
/*if( !defined( 'WP_CACHE' ) || !WP_CACHE ){ 以前的错误代码*/
if( defined( 'WP_CACHE' ) && WP_CACHE ){ //如果wp-config.php开启缓存
    update_post_meta($post_ID, 'views', ( $post_views + 1 ));
}
                echo ( $post_views + 1 );
                exit();
        }
}
add_action( 'wp_ajax_nopriv_postviews', 'postviews_cache' );
add_action( 'wp_ajax_postviews', 'postviews_cache' );

注意:如果网站的WordPress只加入了CDN,没有使用缓存插件的话,需要将上面代码改成下面的,也就是删除开启缓存判断:

/*
* 缓存时更新浏览量-无缓存
* //www.capjsj.cn/ajax_cookies_views.html
*/
function postviews_cache(){
    if( empty( $_POST['postviews_id'] ) ) return;
        $post_ID = $_POST['postviews_id'];
        if( $post_ID > 0 ) {
                $post_views = (int)get_post_meta($post_ID, 'views', true);
                update_post_meta($post_ID, 'views', ( $post_views + 1 ));
                echo ( $post_views + 1 );
                exit();
        }
}

如果想使用有缓存的版本,想要开启网站缓存,可以选择安装缓存插件,或者直接在网站根目录的wp-config.php中,加入下面这行代码:

define('WP_CACHE', true);

如果你看不懂,可以选择关闭页面……

反正我还没有搞懂,先放着……

转载请标明出处:落羽日记 » 关于WordPress开启CDN后浏览量不增加