Just A Blog > WordPress > 使用WP-Postviews显示近期的热门文章

使用WP-Postviews显示近期的热门文章

October 23rd, 2009 Leave a comment Go to comments

在我的博客里一直都是使用WP-Postviews插件来统计文章点击数,以及用来显示热门文章WP-Postviews显示热门文章的函数是get_most_viewed,也可以通过调用get_least_viewed函数来显示最新被浏览的文章。

get_most_viewed显示所有点击最高的文章,并无时间上的限制,而get_least_viewed虽然可以显示近期的点击文章,但不可以设置相应的统计时间,只能是按照插件的默认时间算法来显示,所以如果要显示近一年或半年内的热门文章这两个函数是无法满足的。从WP-Postviews 1.30版本后就取消了一个补充函数get_timespan_most_viewed,这个函数可以显示特定时间内的热门文章,刚好是我想要的。只要把这个函数重新拷贝到WP-Postviews插件的wp-postviews.php文件内就可以使用了。


### Function: Get TimeSpan Most Viewed - Added by Paolo Tagliaferri (http://www.vortexmind.net - webmaster@vortexmind.net)
function get_timespan_most_viewed($mode = '', $limit = 10, $days = 7, $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>'."\n";
}
if($display) {
echo $temp;
} else {
return $temp;
}
}

$days这个参数是多长时间内发表的文章,我在Single页面设置为180天,就是半年内的热门文章,而在首页则输出全部时间的热门文章。如果想在博客后台看到文章的点击数可以把以下代码(via 水煮鱼)放到WP-Postviews插件目录的wp-postviews.php文件或者你主题的function.php文件中。

add_filter('manage_posts_columns', 'postviews_admin_add_column');
function postviews_admin_add_column($columns){
 $columns['views'] = __('Views');
 return $columns;
}
add_action('manage_posts_custom_column','postviews_admin_show',10,2);
function postviews_admin_show($column_name,$id){
 if ($column_name != 'views')
 return;
 $post_views = get_post_meta($id, "views",true);
 echo $post_views;
}
  1. November 10th, 2009 at 10:11 | #21

    @John
    这的确是,如果还可以直接获取文章发表当月的热门文章更好,但我不知道代码怎么写法。。。

  2. December 23rd, 2009 at 17:36 | #22

    如果博客搬家或者进行了整顿,刚刚安装此插件,能统计到前面时间的点击吗??

  3. February 7th, 2010 at 23:10 | #23

    不错!

  4. April 2nd, 2010 at 12:18 | #24

    我试了 竟然不成功 没有多出时间排序可选~

  5. April 2nd, 2010 at 13:14 | #25

    @Rtrash|废纸篓
    所有的统计数据都储存在数据库里面,如果你之前使用过当然是可以接着统计了,反而只能是从你启动插件的时候才开始统计了。

    @夜
    我就是直接使用这个代码的,而且调用的时候侧栏只能使代码来调用这个函数,使用widget的话是没办法显示的。

  6. September 20th, 2010 at 13:59 | #26

    這位大哥,get_least_viewed這個函數是用來調用“最少點擊”的,不是最近點擊。不過我確實想弄一個最近點擊(而非最新網誌)的widgets放在首頁上,不知這位大哥可否有方法?PageViews外掛本身並沒有提供最近點擊的功能。不知道能否通過修改PageViews的程式碼來達到這一效果?求教

Comment pages
1 2 1313
  1. December 22nd, 2009 at 13:37 | #1
  2. October 29th, 2010 at 21:49 | #2
Loading Comment...

分享&收藏

无觅相关文章插件,快速提升流量