• 欢迎光临flyzy小站!分享一些学习路上遇到的坑坑洼洼~

adad

WordPress配置WP Super Cache缓存导致不计数的问题

WordPress在设置缓存后:WordPressp配置缓存提高速度,由于是调用静态界面,所以不会触发PHP代码,也就不会更新文章统计数据~增加缓存为了提升访问速度,但是计数也不能不要吧,虽然只是数据库中的一个数字,但是也可以让自己知道自己博客到底有没有访问量~本文介绍非插件版本解决WordPress在配置WP Super Cache缓存后统计不计数的问题 :arrow:

 

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.cn/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缓存导致文章不计数的问题~不过对于访问静态文件的用户来说,他们对应的页面的数值并不会立马更新,等下一次缓存文件全部刷新就会是最新的阅读量~

点赞