一直有朋友来我博客问为何我博客的 WP-PostViews 在开启 WP-Super-Cache 后还是会正常计数,而他们总是遇到不计数的情况。
其实我也一直没去认真测试,只是在去年还是前年我在测试时发现 WP-PostViews 会在开启 WP_CACHE 时自己加载 jQuery 库和 一些 jQuery 代码(应该是解决缓存时计数问题),于是某一天我就把这个插件的 jQuery 库加载代码屏蔽了,因为我的主题本身加载了 jQuery 库。这个不知道算不算是文章标题所说的“关于 WP-PostViews 跟 WP-Super-Cache 冲突不计数的问题”原因?所以有朋友遇到此类情况可以尝试一下:
1. 检查 wp-config.php 看看 WP-Super-Cache 有没有自动开启 WP_CACHE:就是 wp-config.php 有没有 defined('WP_CACHE', true);
2. 检查你的主题本身有没有加载 jQuery 库,如果有,那么就要检查有没有跟 WP-PostViews 的 jQuery 库重复加载问题。另外我发现 WP-PostViews 加载 jQuery 的语句是 wp_print_scripts('jquery'); 应该是老式加载方式,所以最好屏蔽,屏蔽方法:
打开 WP-PostViews 插件文件 wp-postvies.php,找到(大概是 199 行)
wp_print_scripts('jquery');
注释掉
// wp_print_scripts('jquery');
总结:
1. 开启 WP-Super-Cache,需要在 wp-config.php 开启 WP_CACHE(一般 WP-Super-Cache 插件会自动开启)
2. 主题必须并且只能加载一个 jQuery 库
3. 主题 header.php 的 <head> 里面有 wp_head() 函数
PS:一般 WP 用户的主题、插件最好用WP官方推荐的 wp_enqueue_script 方法来加载 jQuery 库,这样可以有效防止 jQuery 库重复加载导致莫名其妙的问题。
补充:WP Super Cache 的高级选项我是选择了这个“Extra homepage checks. (Very occasionally stops homepage caching) (Recommended)”
按道理就是这样,有这问题的朋友自己尝试下,如果可以解决的话请反馈一下是否有效。
- 本文标题:关于WP-PostViews跟WP-Super-Cache冲突不计数的问题
- 本文链接:https://zww.me/archives/25638
- 发布时间:2012年04月12日 10:18
- 版权声明:除非注明,文章均为 zwwooooo 原创,转载请以链接形式标明本文地址!
好文章总是一针见血的~
国外网站 CACHE 开了加速还是很明显的。
我勒个去
没怎么看懂,我的也是不显示,正在解决这个问题
在最新的wp-postviews1.62中,屏蔽那句其实关系不大,因为87~95行已经针对WP_CACHE做了处理。
也就是说,不能实时看到访问量效果,但是其实每次访问都会记下,刷新缓存的时候就会更新。
@zrong
现在的版本没去看了,以前的版本对js的加载兼容性有问题,会出现重复加载jQ库的问题
我就干脆不用缓存插件了,利索点把服务器搬到国内去
@Defel
备案……永远的痛……
换了新主题,所有的方法都试过了,还是不计数,神奇了。
”“有了
jQuery也在前面加载了
wp_config.php里也有define('WP_CACHE', true);
这个主题也是大名顶顶的大发开发的,很多人都在用,应该不是主题的问题啊!
@左岸读书
0. 缓存导致的问题会根据主机环境和wp环境而不同吧
1. 主题不是说谁开发的就会没问题……
2. 缓存插件比较啊复杂,很难完全去分析,所以我也无法给你答案,文章说的方法对我的wordpress有效
最简单的方法就是放弃缓存插件,除非你的博客访问量惊人,个人觉得如果主机不给力的话,日pv达到万级以上才需要考虑一下。
还有个方法就是改用其他缓存方式,如我现在使用的 memcached 内存缓存,不过这个需要主机支持才行,如果你也用vps的话就可以自己配置了。
哦,突然想到,你要不试试我修改的代码版postviews看看能否工作呢?方法比较简单原始,但是要修改主题。(http://zww.me/post-views-code-version.z-turn 注意要用0.2版)
@zwwooooo
因为浏览量比较大,要用到缓存,您提供的那个方法,我看了你的回复,你没有测试,我还是先找一下其他办法试试。
@左岸读书
简单看了下你的博客,貌似文章页有js错误,看看是否那个影响了插件的工作
@左岸读书
postviews那个插件的JS木有载入,建议直接放到主题的JS文件里或者直接载入,不要用插件那个判断。。
@大发
要如何加载呢?是在header.php直接加载postviews-cache.js吗?那样会出现viewsCacheL10n未定义。
插件的那个判断是if ($should_count && defined('WP_CACHE') && WP_CACHE)吗?
@左岸读书
直接在插件里把外面的条件判断去掉就行了,记得修改后要清理下缓存才能生效。但是这只是让插件能计数,并不能实时更新统计数,只有重新生成缓存的时候才会更新统计数。缓存更新的出发条件是有新评论或者新文章或者缓存到期
@zwwooooo
那个错误是因为我禁用了评论产生的,启用的评论后,没有了错误,还是无法工作。
@大发
修改过了,还是不行。
去掉了上面的那句判断,包括{},第一次没有先禁用postview,结果后台直接无法访问,重新传了postview,先禁用,修改后,启用,后台没问题,就是依然不更新插件。
另:如果我在后台设置了用启必须登录才能评论,在ie选项里如果勾选了显示每一个脚本错误,那么在访问文章页面时,会弹出如下错误:
消息: 无法获取属性“replace”的值: 对象为 null 或未定义
行: 2
字符: 14725
代码: 0
URI: http://www.zreading.cn/wp-content/themes/presscore-lite/js/jquery.js?ver=1.7
这又是为何?
@大发
用这个方法,解决了问题。
@左岸读书
解决就好。
我还是没解决掉这个问题。。。。大哭
@周良
那就不要用 sper cache,配置内存级缓存吧