教程:WordPress 使用 CDN 缓存后无法刷新文章阅读量

Wordpress 天白 5个月前 (03-19) 161次浏览 0个评论

wordpress整站开启cdn或是开启缓存功能后,文章内容被浏览不会再增加浏览量,出现这个问题我们可以通过ajax异步加法的方式来解决。原理也很简单,首次访问某文章内容是通过ajax请求,给相应的内容浏览量+1,然后通过js更改页面的浏览数量,同时将浏览记录写入cookic内,后台访问同一个内容页面时,直接从数据库读取最新的浏览量即可。

下面的代码分为两个部分,需要调用到当前的wordpress主题内容里。js部分是实现异步请求并刷新浏览量,php部分作用是修改数据库

js部分:

<?php
if(is_singular()){ //仅在日志页显示js代码
    ?>
<script>
$(document).ready(function(){
    $.post("<?php echo home_url('/post-view.php')?>",
      {
        id: <?php echo $post->ID; ?>
        },
      function(data,status){
        views = $.parseJSON(data).views;
        //你的阅读量所在的位置。
        $('.entry-content').find('.views').html('<i class="fa fa-eye"></i>'+ views + '次');
      });
});
</script>     
    <?php
}
?>

把以上代码加入到wordpress主题的footer页面内。
注意:在wordpress根目录新建post-view.php文件,内容如下:
require_once('wp-load.php');
$id = (int)sanitize_text_field($_POST['id']);
$views = $wpdb->get_row("SELECT meta_value FROM $wpdb->postmeta WHERE post_id = $id and meta_key = 'views'");
$views = intval($views->meta_value);
$cookieName = 'post_views_list';
$id_arr = explode(',',urldecode($_COOKIE[$cookieName]));
if(!in_array($id,$id_arr)){
$views = $views +1;
$wpdb->update( $wpdb->postmeta, array( 'meta_value' => $views ), array( 'post_id' => $id, 'meta_key' => 'views' ) );
array_push($id_arr,$id);
//设置cookie过期的时间,这里设定的市10天。
setcookie($cookieName,implode(',',$id_arr),time()+3600 * 24 * 10);
}
echo "{\"views\":". $views. ",\"id\":" . $id ."}";
完成后,刷新一下缓期,使用页面footer位置的js代码生效即可。
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址