关于WP-PostViews跟WP-Super-Cache冲突不计数的问题

» 2012-04-12 78条评论

一直有朋友来我博客问为何我博客的 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)”

按道理就是这样,有这问题的朋友自己尝试下,如果可以解决的话请反馈一下是否有效。

zww
or
oooo

“关于WP-PostViews跟WP-Super-Cache冲突不计数的问题”有78条评论

  1. sinsky says:

    :razz: 好文章总是一针见血的~

    国外网站 CACHE 开了加速还是很明显的。

  2. Blueblue says:

    我勒个去 :???:

  3. 没怎么看懂,我的也是不显示,正在解决这个问题

  4. zrong says:

    在最新的wp-postviews1.62中,屏蔽那句其实关系不大,因为87~95行已经针对WP_CACHE做了处理。
    也就是说,不能实时看到访问量效果,但是其实每次访问都会记下,刷新缓存的时候就会更新。

    1. zwwooooo says:

      @zrong
      现在的版本没去看了,以前的版本对js的加载兼容性有问题,会出现重复加载jQ库的问题

  5. Defel says:

    我就干脆不用缓存插件了,利索点把服务器搬到国内去 :mrgreen:

    1. zwwooooo says:

      @Defel
      备案……永远的痛……

  6. 换了新主题,所有的方法都试过了,还是不计数,神奇了。

    ”“有了
    jQuery也在前面加载了
    wp_config.php里也有define('WP_CACHE', true);

    这个主题也是大名顶顶的大发开发的,很多人都在用,应该不是主题的问题啊!

    1. zwwooooo says:

      @左岸读书
      0. 缓存导致的问题会根据主机环境和wp环境而不同吧
      1. 主题不是说谁开发的就会没问题……
      2. 缓存插件比较啊复杂,很难完全去分析,所以我也无法给你答案,文章说的方法对我的wordpress有效

      最简单的方法就是放弃缓存插件,除非你的博客访问量惊人,个人觉得如果主机不给力的话,日pv达到万级以上才需要考虑一下。
      还有个方法就是改用其他缓存方式,如我现在使用的 memcached 内存缓存,不过这个需要主机支持才行,如果你也用vps的话就可以自己配置了。
      哦,突然想到,你要不试试我修改的代码版postviews看看能否工作呢?方法比较简单原始,但是要修改主题。(http://zww.me/post-views-code-version.z-turn 注意要用0.2版)

    2. @zwwooooo
      因为浏览量比较大,要用到缓存,您提供的那个方法,我看了你的回复,你没有测试,我还是先找一下其他办法试试。

    3. zwwooooo says:

      @左岸读书
      简单看了下你的博客,貌似文章页有js错误,看看是否那个影响了插件的工作

    4. 大发 says:

      @左岸读书
      postviews那个插件的JS木有载入,建议直接放到主题的JS文件里或者直接载入,不要用插件那个判断。。

    5. @大发
      要如何加载呢?是在header.php直接加载postviews-cache.js吗?那样会出现viewsCacheL10n未定义。
      插件的那个判断是if ($should_count && defined('WP_CACHE') && WP_CACHE)吗?

    6. 大发 says:

      @左岸读书
      直接在插件里把外面的条件判断去掉就行了,记得修改后要清理下缓存才能生效。但是这只是让插件能计数,并不能实时更新统计数,只有重新生成缓存的时候才会更新统计数。缓存更新的出发条件是有新评论或者新文章或者缓存到期

    7. @zwwooooo
      那个错误是因为我禁用了评论产生的,启用的评论后,没有了错误,还是无法工作。

    8. @大发
      修改过了,还是不行。
      去掉了上面的那句判断,包括{},第一次没有先禁用postview,结果后台直接无法访问,重新传了postview,先禁用,修改后,启用,后台没问题,就是依然不更新插件。

      另:如果我在后台设置了用启必须登录才能评论,在ie选项里如果勾选了显示每一个脚本错误,那么在访问文章页面时,会弹出如下错误:

      消息: 无法获取属性“replace”的值: 对象为 null 或未定义
      行: 2
      字符: 14725
      代码: 0
      URI: http://www.zreading.cn/wp-content/themes/presscore-lite/js/jquery.js?ver=1.7

      这又是为何?

    9. @大发
      用这个方法,解决了问题。

    10. zwwooooo says:

      @左岸读书
      解决就好。

  7. 周良 says:

    我还是没解决掉这个问题。。。。大哭

    1. zwwooooo says:

      @周良
      那就不要用 sper cache,配置内存级缓存吧

发表评论

昵称 *

网址

B em del U Link Code Quote