程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> 真正解決wp-postviews在開啟wp-super-cache下不計數的問題

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

編輯:PHP基礎知識
 

鑒於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.
 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved