总结wp-postviews不计数的解决方法

第一种,启用Cache导致不计数
例,启用WP Super Cache
解决方法:
1、在后台禁用WP Super Cache插件
2、删除/wp-content/plugins/目录的wp-super-cache目录
3、删除wp-content目录下面的cache目录。
4、检查根目录下的wp-config.php,如果有define(’WP_CACHE’, true); 则把这一行删掉

PS:本博就是用为曾经装过W3 Total Cache插件,卸载不完全,导致出错。如下:
/** Enable W3 Total Cache **/
define(‘WP_CACHE’, true); // Added by W3 Total Cache

第二种,静态化导致的不计数

当WordPress安装了cos-html-cache后,按照默认的设置,插件wp-postviews是无法工作的。经过一定修改,可以使wordpress在静态化下实现计数。
在wp-postviews.php中,找到
if(defined(‘WP_CACHE’) && WP_CACHE)
将其替换为
if ((defined(‘WP_CACHE’) && WP_CACHE)||(defined(‘COSMETA’ ) && COSMETA))
通常情况下就可以实现计数了,如果不行可以留言给我:)

第三种,其他复杂的情况,比如jquery框架载入的问题

本博的另一篇文章《解决PHP Speedy与wp-postviews共用》可供参考,另下面转载一篇文章

解決 wp-postviews 不能與 cache 同時啟用的問題

太多朋友問到這個問題了, 不得不發個簡單的說明.
大家看到我這邊使用了 object-cache 大量減少 queries 和 loading time, 同時又發現在 “點擊統計” 又可以正常計數. 這就奇怪了, 為何他開了 cache 就不計數了?
先看文件:
wp-postviews.php 約在 95 行:

if(defined(‘WP_CACHE’) && WP_CACHE) {
// … 若 defined(‘WP_CACHE’, true); 後面才執行 jQuery Ajax 計數
object-cache.php 約在 405 行:

if ( ini_get(‘safe_mode’) && ! defined(‘ENABLE_CACHE’) )
return; // 在 wp-config.php 有 define(‘ENABLE_CACHE’, true); 才會 cache
一個是用 ‘WP_CACHE’, 一個是用 ‘ENABLE_CACHE’, 到底哪個才對呢?

WordPress 真正的 object-cache 文件在 /wp-includes/cache.php
注意看文件的內容, 它只是用於服務器的 memory cache.
而我們加的 object-cache.php 全名是 ‘File-Based Object Caching’, 是服務器的 disk cache.
(因為 WordPress 2.5 以前的版本內置了disk cache, 後來刪除此功能改用現在的 memory cache.)
‘File-Based Object Caching’ 就是將以前取消的 disk cache 恢復, 裏面延用了以前的 ‘ENABLE_CACHE’.
WordPress 從沒對 plugins 開放 ‘ENABLE_CACHE’, 所以從 plugins 角度來說, 應該必需使用 ‘WP_CACHE’ 才是正確的.
若 object-cache 是用 ‘ENABLE_CACHE’, 而 wp-postviews 判斷的卻是 ‘WP_CACHE’, 所以 jQuery Ajax 不啟動, 也就不計數了.
解決方式: 將 object-cache.php 和 wp-config.php 有 ‘ENABLE_CACHE’ 的地方改為 ‘WP_CACHE’.

ps. 若你不用改也能正常計數, 應該是你以前試過 wp-super-cache 之類的插件, ‘WP_CACHE’ 已是開的, 所以沒感覺.

另一個原因:
若 ‘WP_CACHE’ 已開, wp-postviews 會自動啟用 jQuery Ajax 傳資料. 所以 jQuery 必需是在 wp_head() 之前掛上.
若掛在 wp_head() 之後或掛在 wp_footer() 都是不計數的. 因為 jQuery 先掛上才能讓後面的語法生效.
wp-postviews 1.50 是用 wp_print_scripts(‘jquery’) 掛 jQuery, 建議改用 wp_enqueue_script( ‘jquery’ ) 較不會出錯.
這樣可以保証先有 jQuery 之後再執行 Ajax 代碼, 細節請參考《WordPress 標準的 script 掛法》.
若你的 wp-super-cache 之類的插件不能和 wp-postviews 同時啟用, 通常是這問題.
希望新手也能看懂~

6 Comments
  1. 你好,你这个解决办法我还是不能用啊,WP版本是3.3.2

    1. 不太清楚,也可以用其他插件的了,再试一下吧,主要是排除缓存问题。

  2. 我的问题同一楼一样,就是使用cos-html-cache无法统计,保持原有状态不变,求解,替换if ((defined(‘WP_CACHE’) && WP_CACHE)||(defined(‘COSMETA’ ) && COSMETA))
    也是不行的,我的网站是www.pangu51.com 帮忙看看 :sx:

    1. 不太清楚,你用ajax之类的应该就能统计了吧

  3. 哥们你把WP升级 还有POSTVIEWS升级到最新看下,

    现在变成

    if ($should_count && defined(‘WP_CACHE’) && WP_CACHE) {

    这样了。
    怎么调都不兼容的样子。

    1. 网上查查吧,是不是函数变了?或者升级下这个插件咯,或者就用老版本

Leave a Reply

Time limit is exhausted. Please reload the CAPTCHA.