WordPress在设置缓存后:WordPressp配置缓存提高速度,由于是调用静态界面,所以不会触发PHP代码,也就不会更新文章统计数据~增加缓存为了提升访问速度,但是计数也不能不要吧,虽然只是数据库中的一个数字,但是也可以让自己知道自己博客到底有没有访问量~本文介绍非插件版本解决WordPress在配置WP Super Cache缓存后统计不计数的问题
文章目录
WordPress文章计数方法
首要任务要知道WordPress是怎么计数的。这个根据不同的主题所在的位置也不一样,一般是放在functions.php里,更新流程为找到当前阅读的文章->获取到数据库中的当前阅读量->更新数据库信息。以我用的主题方法修改为例:
function set_post_views() { $post_ID = $_POST["id"];//找到文章 if ($post_ID) { $post_views = (int) get_post_meta($post_ID, 'views', true);//得到当前阅读数 if (!update_post_meta($post_ID, 'views', ($post_views + 1))) {//更新 add_post_meta($post_ID, 'views', 1, true); } } die;//结束 }
其中update_post_meta()和add_post_meta()都是WordPress自带的方法,用来获取以及更新对应文章相关信息的。
通过AJAX动态请求完成文章计数
在文章页面(single.php)最下面加入如下js代码:
$(function() { $.post( ajaxurl, {action :'single_view', id:<?php the_ID(); ?>}, null ); });
在WordPress后台绑定Action
具体方法是在function.php中绑定这个action,用的是WordPress的add_action()方法:
add_action('wp_ajax_nopriv_single_view', 'set_post_views'); add_action('wp_ajax_single_view', 'set_post_views');
其中wp_ajax_nopriv_your_action是用来获取匿名用户的请求的,而wp_ajax_your_action是用来获取登录用户的请求的,第二个参数set_post_views则是你要绑定的方法的名称。
ajaxurl赋值
Ajax请求中用到的ajaxurl可以直接指定,也可以通过代码获取,以我的网站为例,ajaxurl对应的值是https://www.flyzy2005.com/wp-admin/admin-ajax.php,当然,也可以在functions.php中加入代码动态为每个页面增加一个ajaxurl的全局变量:
add_action('wp_head', 'my_ajaxurl'); function my_ajaxurl() { echo '<script type="text/javascript"> var ajaxurl = "' . admin_url('admin-ajax.php') . '"; </script>'; }
至此,你已经完成了通过AJAX来解决WordPress配置WP Super Cache缓存导致文章不计数的问题~不过对于访问静态文件的用户来说,他们对应的页面的数值并不会立马更新,等下一次缓存文件全部刷新就会是最新的阅读量~
相关文章