突然发现文章浏览计数功能失效,文章发了几个月才几十几百的浏览量。我以为是因为最近发的文章不受欢迎,不受欢迎。但是发表几个月,访问量不到200,不合理。
一、发现问题
所以我花时间分析了一下,查了一下网站日志,发现没有浏览计数的要求。
因为网站打开了纯静态缓存(nginx_fastcgi_cache),所以wp-postviews计数方法将自动改为ajax正常情况下,提交方式,Nginx以下请求记录将出现在日志中:
/wp-admin/admin-ajax.php?postviews_id=xxxx&action=postviews&_=xxxxxxxxxx
我看了看最近半个月。Nginx只有几个日志,似乎有情况。
二、解决问题
首先,我打开一篇文章,按下它F12.刷新页面NetWork搜索我熟悉的内容admin-ajax,发现没有记录,甚至搜索php没有关键字的请求记录,直接在页面源代码中搜索关键字也一无所获,似乎真的没有浏览计数代码。
我以为是更新WP导致PostViews插件不工作,所以打开WP-PostViews查看源码,发现有以下逻辑代码:
if($should_count) { if(defined('WP_CACHE') && WP_CACHE) { echo "\n".''."\n"; echo ''."\n"; echo '/* */'."\n"; echo ''."\n"; echo ''."\n";} else { if(!update_post_meta($id, 'views', ($post_views 1))) { add_post_meta($id, 'views', 1, true); }}}
发现了开启ajax计数的必要条件:打开WP_CACHE缓存!!!
鉴于对WP我直接打开了熟悉程度wp-config.php文件发现我自己注释了以下代码:
//define("WP_CACHE", true);
估计之前调试网站的时候注释了。
因此取消注释,重载php-fpm,并清理Nginx静态缓存后,熟悉前台ajax代码回来了:
/* */
再看了下Nginx日志,admin-ajax.php?xxx请求也回来了,浏览计数功能似乎已经恢复正常。
三、结论分析
①、为什么不完全不计数或只计数一次?
回顾下一个过程,很明显文章发表后还是有计数的,但是计数很少。为什么?事实上,原因很简单,文章在第一次缓存时,WP-PostViews事实上,它将在非缓存环境中工作一次,并使用它php计数。计数后,文章缓存,再次访问不会更新计数,直到有人发表评论或缓存到期,导致缓存刷新,将再次启动浏览计数!这就是为什么不计数或只计数一次。
②、WP-PostViews缓存环境下计数的条件
这个问题很常见,刚搜了一下,发现和我有很多类似的情况。也就是说,PostViews判断插件WP缓存是否打开(WP_CACHE),若打开则使用ajax否则,使用计数方法php计数方式。
所以,如果你使用是非,PHP例如,缓存机制Nginx的fastcgi_cache或者proxy_cahe,那么必须在wp-config.php里面开启WP_CACHE:
define("WP_CACHE", true);
让插件知道你的网站有缓存机制。否则,您必须修改插件,删除此判断,并强行将插件插入页面ajax计数代码。