解决网站静态缓存后WP-PostViews插件不计数的问题

突然发现文章浏览计数功能失效了,文章发了几个月才几十上百的浏览数,本以为是因为最近发的文章都比较冷门,不受欢迎。但是发布了几个月,才不到2百的访问量,这就不合理了。解决网站静态缓存后WP-PostViews插件不计数的问题

一、发现问题

于是花时间分析了下,结果一查网站日志,发现浏览计数的请求居然一个都没有。。。

由于网站开启了纯静态缓存(nginx_fastcgi_cache),所以wp-postviews的计数方式会自动改为ajax提交方式,正常情况下,Nginx日志里面会出现如下请求记录:

而我翻看了最近半个月的Nginx日志,只有寥寥数条,看来确实有情况。

二、解决问题

首先,我打开了一篇文章,按下F12,再刷新该页面,在NetWork内容中搜索我熟悉的admin-ajax,发现没有记录,甚至搜索php关键词都没有任何请求记录,直接在页面源码中搜索关键词也是一无所获,看来确实没有浏览计数代码了。

我以为是更新了WP导致PostViews插件不工作了,于是打开WP-PostViews源码看了下,发现有如下逻辑代码:

发现了开启ajax计数的必要条件:开启WP_CACHE缓存!!!!!

鉴于对WP的熟悉程度,我直接打开了wp-config.php文件,发现果然是我自己注释了如下代码:

估计是之前调试网站的时候注释掉了。

于是取消注释,重载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:

让插件知道你的网站是有缓存机制的。要不然,你就得修改插件,去掉这个判断,让插件强行在页面中插入ajax计数代码了。

发表评论

gravatar

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

刷新评论

目前评论:29   其中:访客  25   博主  4

  1. 声学成像仪 2 来自天朝的朋友 谷歌浏览器 Windows 7 江苏省苏州市 电信

    文章写得不错,受教了。

  2. 小五 1 来自天朝的朋友 火狐浏览器 Windows XP 湖北省武汉市 联通

    感谢大神的干货,从这里学到不少东西。谢谢

  3. 龙笑天 4 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 电信

    貌似刷新页面,计数还是没变啊~
    我的启用了CDN,计数都不刷新了…… :sad:

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省深圳市 电信

      后台变了就行

  4. 明月登楼 5 来自天朝的朋友 谷歌浏览器 Windows 10 河南省南阳市 电信

    我已经禁止显示前端的文章浏览数量了!从此感觉心情舒畅多了!

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省深圳市 电信

      这个可以有

  5. 龙笑天 4 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 天威视讯

    :shock: 是这个“后台变就行”…. [惊呆了]

  6. 自由屋博客 2 来自天朝的朋友 QQ浏览器 Windows 10 四川省乐山市 电信

    学习了,原来是这么回事,会技术就是不一样!我原来遇到这个问题,后来就不了了之了!转发了!谢谢

  7. 九哥 2 来自天朝的朋友 QQ浏览器 Windows 7 云南省昭通市 电信

    膜拜技术大神,要是我这种小白遇到这个问题只能百度了,估计都解决不了!

  8. BanYuner 4 来自天朝的朋友 谷歌浏览器 Windows 10 湖北省武汉市 电信

    只要数据库里面的数字在变动就可以了

  9. 格雷弗动平衡仪 2 来自天朝的朋友 谷歌浏览器 Windows 7 江苏省苏州市 电信

    文章写得不错哦。

  10. 晓庄 4 来自天朝的朋友 谷歌浏览器 Windows 10 广东省深圳市 电信

    强行插入留言一波

  11. ktv培训 1 来自天朝的朋友 谷歌浏览器 Windows 7 浙江省杭州市 电信

    恩,说的还是不错的额

  12. 成航先森 5 来自天朝的朋友 谷歌浏览器 Windows 7 四川省成都市 电信

    一直想前台浏览量统计也能实时的变动,奈何无法解决。今天一看,还以为大神终于关注到这一点了呢。。。

  13. 神情恍惚的小宁宁 2 来自天朝的朋友 QQ浏览器 Windows 7 山东省威海市 联通

    不知道张戈同学有没有兴趣发一篇关于IP同时间内请求数限制的文章呢?
    网络中的文章阐述的都很模糊,操作都很天书,很怕误伤了蜘蛛,毕竟辛苦的SEO成果不容易。
    但是对于一些BT级的IP,每秒同时请求10 20次,简直要命。
    嘿嘿,原来可以关闭震动,我的妈~~ 我打字是闭着眼的。

  14. 美股行情 0 来自天朝的朋友 火狐浏览器 Windows 10 浙江省金华市 电信

    不错!TKS~~~~~ :evil:

  15. 亦之博客 0 来自天朝的朋友 谷歌浏览器 Windows XP 江苏省苏州市 联通

    受教了,来学习下。 :cool:

  16. 互联网笔记 0 来自天朝的朋友 谷歌浏览器 Windows 10 北京市 CNISP会员

    非常实用,感谢分享~

  17. 南侠 1 来自天朝的朋友 火狐浏览器 Windows 7 北京市 移动

    cdn设置定时刷新时间周期短一点也不行吗?

  18. 灯芯绒面料 1 来自天朝的朋友 谷歌浏览器 Windows 7 江苏省常州市 电信

    蛮好用的,一步步跟着做

  19. 网赚 2 来自天朝的朋友 谷歌浏览器 Windows 7 山东省聊城市 电信

    不错不错,学习了

  20. 憧憬点滴记忆 2 来自天朝的朋友 谷歌浏览器 Windows 10 四川省成都市 移动

    这个我在之前也分享过一个解决方案,是在页面加载完成之后通过Ajax发送请求后台来进行自增浏览量的方式来解决。解决WordPress开启CDN缓存后文章浏览量不自增的问题

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

      牛B,你可以再改改代码,支持重复IP访问同一个页面重复计数的问题,里可能最好引入redis或memcached缓存来记录下IP状态,比如一天1个IP访问同一个页面多次,只计入一次浏览数。

  21. 在线看小说 2 来自天朝的朋友 火狐浏览器 Windows 7 北京市朝阳区 联通

    我的缓存一直就没搞定

  22. yimo 1 来自天朝的朋友 谷歌浏览器 Windows 7 云南省昆明市 电信

    开启CDN用户登录后,当前页的登录框依然是未登录状态,这个貌似解决不了,就只好关闭html缓存了

  23. 益阳网站建设公司 0 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 联通

    想知道wordpress自动加内链的插件是哪个。

  24. 济南SEO 1 来自天朝的朋友 谷歌浏览器 Windows 7 河北省衡水市 电信

    我的博客一直都在用WP-PostViews,先收藏了,后续用得到再照做,谢谢分享

  25. 老鬼 2 来自天朝的朋友 谷歌浏览器 Mac OS X 10_12_6 四川省成都市 电子科技大学

    花了一天,终于把这个问题解决了,谢谢博主。

加载中,请稍候...