摘要:wordpress整站开启cdn或是开启缓存功能后,文章内容被浏览不会再增加浏览量,出现这个问题我们可以通过ajax异步…
wordpress整站开启cdn或是开启缓存功能后,文章内容被浏览不会再增加浏览量,出现这个问题我们可以通过ajax异步加法的方式来解决。原理也很简单,首次访问某文章内容是通过ajax请求,给相应的内容浏览量+1,然后通过js更改页面的浏览数量,同时将浏览记录写入cookic内,后台访问同一个内容页面时,直接从数据库读取最新的浏览量即可。
下面的代码分为两个部分,需要调用到当前的wordpress主题内容里。js部分是实现异步请求并刷新浏览量,php部分作用是修改数据库
js部分:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<?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文件,内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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代码生效即可。
来源:http://www.wazhuti.com/2230.html