不知道出於什麼原因,1.30 後的 WP-PostViews 外掛取消了原先存在的 get_timespan_most_viewed 函式,這也是最
近在網上得知的,因為最近有心情修改主題、外掛,發現小子的部落格上面這個外掛提供的小工具在邊欄的顯示內容幾個月都不怎麼變,原因很簡單,設定的是瀏覽最
多的文章,自然多的越來越多了,於是想修改下顯示設定,很遺憾後臺沒有相關設定,雖然有最近的,但是好像還不是我要的結果。
Google 一陣子才知道原先這個外掛有這個功能的,現在沒有了,但是有人在網上共享了之前的函式,這樣就簡單多了。把以下函式複製到 wp-postviews.php 檔案的任意地方 (當然是要合適點的任意地方,不要放其他函式中間就 ok 了) 。
function get_timespan_most_viewed($mode = '', $limit = 20, $days = 1, $display = true) {
global $wpdb, $post;
$limit_date = current_time('timestamp') - ($days*86400);
$limit_date = date("Y-m-d H:i:s",$limit_date);
$where = '';
$temp = '';
if(!empty($mode) && $mode != 'both') {
$where = "post_type = '$mode'";
} else {
$where = '1=1';
}
$most_viewed
= $wpdb->get_results("SELECT DISTINCT $wpdb->posts.*,
(meta_value+0) AS views FROM $wpdb->posts LEFT JOIN
$wpdb->postmeta ON $wpdb->postmeta.post_id = $wpdb->posts.ID
WHERE post_date < '".current_time('mysql')."' AND post_date >
'".$limit_date."' AND $where AND post_status = 'publish' AND meta_key =
'views' AND post_password = '' ORDER BY views DESC LIMIT $limit");
if($most_viewed) {
foreach ($most_viewed as $post) {
$post_title = get_the_title();
$post_views = intval($post->views);
$post_views = number_format($post_views);
$temp
.= "<li><a
href="".get_permalink()."">$post_title</a> - $post_views
".__('views', 'wp-postviews')."</li>";
}
} else {
$temp = '<li>'.__('N/A', 'wp-postviews').'</li>'."
";
}
if($display) {
echo $temp;
} else {
return $temp;
}
}
單單的放上以上語句其實還是不行的,雖然很多部落格說可以,可能都是認為寫部落格的都懂語言吧?雖然我也能改,但小子覺得這個對於那些不懂 php 為何物的新手來說,真的是難上加難啊。
這裡小子為了大家方便就整理了下,為大家分享。
很簡單,開啟 wp-postviews.php 檔案在 ### Function: Display Least Viewed
Page/Post 或者其他的函式上面貼上以上函式,再次說明,函式新增位置隨意,但是儘量與其他業務函式放到一起,便於分析嘛!之後的操作就是再小工具
的選項 Statistics
Type 中新增 get_timespan_most_viewed 選項,這個直接在 wp-postviews.php 檔案中搜尋 Statistics
Type,你可以看到
<option value="least_viewed"<?php
selected('least_viewed', $type); ?>>< ?php _e('Least Viewed',
'wp-postviews'); ?></option>
或者其他選項的內容,複製一行,貼上到上面或者下面 (當然也可以是中間),然後將以上語句中 least_viewed 或者其他的你複製的語句中的
值,修改為 get_timespan_most_viewed,這樣就完成了後臺操作,不過目前選擇這個選項後邊欄是無顯示的,因為輸出的地方還要改進,
下一步同樣是在 wp-postviews.php 檔案中操作,搜尋 class WP_Widget_PostViews,在 function
widget 函式中找到 switch 語句,其中應該有四個轉向,形如
case 'least_viewed':
get_least_viewed($mode, $limit, $chars);
break;
不用想,重新複製一份,貼上到並列的位置,將 least_viewed 修改為 get_timespan_most_viewed,這樣,回到首頁刷
新下,顯示效果應該是一天熱門的,因為是函式預設的 (原函式是預設 30 天,小子設定為 1 天了),這裡沒有在後臺新增選項,有需要可以自己需求修改函式體內
資料即可。
另外,還有一點就是,上面提供的 get_timespan_most_viewed 函式是舊版本中的函式,不支援目前新版的輸出格式化等,這裡小子
又根據新的變數定義整理瞭如下函式,需要的可以直接複製替換上面提供的 get_timespan_most_viewed 函式來使用,函式體如下
$where = "post_type = '$mode'";
} else {
$where = '1=1';
}
$most_viewed
= $wpdb->get_results("SELECT DISTINCT $wpdb->posts.*,
(meta_value+0) AS views FROM $wpdb->posts LEFT JOIN
$wpdb->postmeta ON $wpdb->postmeta.post_id = $wpdb->posts.ID
WHERE post_date < '".current_time('mysql')."' AND post_date >
'".$limit_date."' AND $where AND post_status = 'publish' AND meta_key =
'views' AND post_password = '' ORDER BY views DESC LIMIT $limit");
if($most_viewed) {
foreach ($most_viewed as $post) {
$post_views = intval($post->views);
$post_title = get_the_title($post);
if($chars > 0) {
$post_title = snippet_text($post_title, $chars);
}
$post_excerpt = views_post_excerpt($post->post_excerpt, $post->post_content, $post->post_password, $chars);
$temp = stripslashes($views_options['most_viewed_template']);
$temp = str_replace("%VIEW_COUNT%", number_format_i18n($post_views), $temp);
$temp = str_replace("%POST_TITLE%", $post_title, $temp);
$temp = str_replace("%POST_EXCERPT%", $post_excerpt, $temp);
$temp = str_replace("%POST_CONTENT%", $post->post_content, $temp);
$temp = str_replace("%POST_URL%", get_permalink($post), $temp);
$output .= $temp;
}
} else {
$output = '<li>'.__('N/A', 'wp-postviews').'</li>'."
";
}
if($display) {
echo $output;
} else {
return $output;
}
}
}
如函式引數所示,設定天數的地方已經用註釋標註了,這裡仍然不再提供面板設定的選項了,需要的朋友可以自己折騰,小子在除錯的時候可能因為當日訪問量過低,設定 1 天不能實現預期的顯示效果,就設定回 30 天了,大家可以根據需要設定。