wordpress启用cdn后刷新文章阅读量
wordpress启用cdn后,在缓存过期之前由于不再请求源站,所以对日志页面的访问不会再增加日志的浏览量。为了解决这个问题,可以通过ajax异步的方式刷新日志的浏览量。
原理:第一次访问某日志时,通过ajax请求服务器,给相应的日志浏览量+1,然后通过js更改页面显示的阅读量,同时将浏览记录写入cookie。后续访问同一日志时,直接从数据库读取最新访问量并显示。
代码分两部分,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 ."}";
最后,很重要的异步,刷新cdn缓存,使页面加入的js代码生效即可。