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代码生效即可。