Question to say "I can!"

真正解決wp-postviews在開啟wp-super-cache下不計數的問題

2013-12-02

這個問題我查了網上所有的幫助文件:

包括:

都無法成功解決,是大發老師給了最終的解決辦法。

感謝大發的解答,所以,有問題,先通過自己解決,這樣才能進入最核心的問題,也可以排除其他的可能存在的問題,獲得的解答才是最根本有效的。

解決問題的原文:大發——真正解決wp-postviews在開啟wp-super-cache下不計數的問題

鑒于wp-postviews和wp-super-cache都是熱門插件,所以兩個插件沖突不計數的問題已經是個老問題了,但是網上的解決方案并沒有真正解決問題,雖然計數了,但是在緩存更新之前是不會更新瀏覽數的,相信很多強迫癥的朋友根本就不能忍受這個問題。到最后只能放棄其中的一個。當然,還有壓根就不計數的朋友,這類朋友基本是因為長得太丑。

wp-super-cache是在apache的環境下工作,nginx需要重寫配置rewrite規則。如何配置不在本文討論范圍內。

說下wp-super-cahce的原理吧,是把所有的頁面轉化成靜態html,然后再通過30X定向,繞后php直接訪問靜態html來加速,在有新評論和新文章時會更新緩存,而wp-postviews的原理是每次訪問給meta加1,啟用cache后不調用php文件了,所以自然不會計數。于是插件的作者通過ajax來增加計數,但是不知道為啥,有時候js不能正確加載,于是手動修改下吧。

編輯wp-postviews.php,在插件目錄下哦,找到下面的這段

if ($should_count && defined('WP_CACHE') && WP_CACHE) {
            // Enqueue and localize script here
            wp_enqueue_script('wp-postviews-cache', plugins_url('postviews-cache.js', __FILE__), array('jquery'), '1.64', true);
            wp_localize_script('wp-postviews-cache', 'viewsCacheL10n', array('admin_ajax_url' => admin_url('admin-ajax.php', (is_ssl() ? 'https' : 'http')), 'post_id' => intval($post->ID)));
        }

替換成下面這樣,也就是去掉了條件判斷。

wp_enqueue_script('wp-postviews-cache', plugins_url('postviews-cache.js', __FILE__),true);
wp_localize_script('wp-postviews-cache', 'viewsCacheL10n', array('admin_ajax_url' => admin_url('admin-ajax.php', (is_ssl() ? 'https' : 'http')), 'post_id' => intval($post->ID)));

然后重新生成下緩存,就OK了。

這時候每次點擊的時候后臺會更新顯示數,但是前臺不會更新,下面我們來解決這個問題。

可以通過AJAX和DOM操作來解決。把下面的代碼添加到wp-postviews.php

add_action('wp_ajax_nopriv_show_postview', 'show_postview');
add_action('wp_ajax_show_postview', 'show_postview');
function show_postview(){
    $views_options = get_option('views_options');
    $ID = $_POST["bigfa_view"];
    $custom_fields = get_post_custom($ID);
    $my_custom_field = $custom_fields['views'];
    foreach ( $my_custom_field as $key => $value ) {
        echo str_replace('%VIEW_COUNT%', number_format_i18n($value), $views_options['template']);
    }
    die;
}

這段添加到postviews-cache.js

jQuery(document).ready(function() {
    var ajax_data = {
        action: "show_postview",
        bigfa_view: viewsCacheL10n.post_id
    };
    $.post(viewsCacheL10n.admin_ajax_url, ajax_data,
    function(data) {
        $('.show-view').html(data);
    });
    return false;
});

默認的調用方法是

<?php if(function_exists('the_views')) {the_views();} ?>

現在替換為

<span><?php if(function_exists('the_views')) {the_views();} ?></span>

這時候我們發現,文章頁是正常計數的而且實時刷新,但是首頁還是不行啊,這個沒辦法了,不過可以通過設置wp-super-cache,不緩存首頁,這樣就完美解決問題了。。

Goodbye,O'Connor.

作者:admin | Categories:優化維護 | Tags:

6條評論

  1. 鄭州seo說道:

    求這個博客wp皮膚。。

  2. 左岸讀書說道:

    修改之前記得先把這個插件停用,修改完成之后再進行啟用。

  3. 未知說道:

    這類朋友基本是因為長得太丑。

  4. Pang說道:

    好辦法啊 加載js

  5. 張戈說道:

    粗略看了下,最后的替換應該是 才對吧,否則你js去修改的時候如何找得到目標show-view呢。。。

  6. 張戈說道:

    貌似代碼被吞了,補充下:

發表評論

電子郵件地址不會被公開。 必填項已用*標注

*

澳洲f1赛车b盘开奖套路 凯尔特人vs爵士 黑龙江快乐十分开奖结果爱彩乐 股票指数什么意思 幸运11选5官网 乌鲁木齐站街女爽记 辽宁快乐十二选五 11选5开奖结果山 上海麻将赢牌技巧 辽宁十一选五走势图图 2013中日足球直播 今日湖北快3预测号码 福利3d开奖号 股票代码查询一览表股票行情中国所有股票代码 大发pk10技巧方法 友田彩也香穿紫色长袜哪一部 江苏快三号码预测软件