WP-PostViews插件显示设定时间内热门文章打赏

不知道出于什么原因,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>'."\n";
}
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函数来使用,函数体如下

if(!function_exists('get_timespan_most_viewed')) {
function get_timespan_most_viewed($mode = '', $limit = 10, $chars = 0,$days = 30/*设置天数*/, $display = true) {
global $wpdb;
$limit_date = current_time('timestamp') - ($days*86400);
$limit_date = date("Y-m-d H:i:s",$limit_date);
$views_options = get_option('views_options');
$where = '';
$temp = '';
$output = '';
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_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>'."\n";
}
if($display) {
echo $output;
} else {
return $output;
}
}
}

如函数参数所示,设置天数的地方已经用注释标注了,这里仍然不再提供面板设置的选项了,需要的朋友可以自己折腾,小子在调试的时候可能因为当日访问量过低,设置1天不能实现预期的显示效果,就设置回30天了,大家可以根据需要设置。

WP-PostViews插件显示设定时间内热门文章
文章《WP-PostViews插件显示设定时间内热门文章》二维码
  • 微信打赏
  • 支付宝打赏

已有16条评论

  1. 闺蜜在买啥

    很喜欢那个小功能,给侧边栏省空间,嘿嘿

    2013-04-19 01:33 回复
    • 朴人博客

      这个最近也就是倒序排的前十个,随机是全部随机,而热门则是评论最多的,所以归根结底,只是三条sql

      2013-04-19 21:18 回复
  2. 闺蜜在买啥

    问下博主,有没有插件可以像本页右上侧(“最近文章”,“热门文章”,“随机文“”)这样同时显示3个板块,我看到泪雪的这个主题是使用CSS的

    2013-04-18 22:22 回复
    • 朴人博客

      没见过,这个是直接写的函数,在主题里面,有时间可以提取出来做个插件,呵呵

      2013-04-18 22:38 回复
  3. 1

    WP-PostViews Plus用这个其实也可以。。。

    2013-04-16 15:47 回复
    • 朴人博客

      插件很多,适合的才是最好的,这个看自己需要了

      2013-04-16 20:40 回复
  4. 闺蜜在买啥

    留爪

    2013-04-14 21:25 回复
  5. 十年灯

    谢谢好文章

    2013-01-08 11:46 回复
  6. 金果

    博主好,我按照文章中的内容修改后,怎么出不来效果呢?

    2012-03-27 21:56 回复
    • 穷小子

      是最近更新文章少吧,如果设置1天或者几天的话,并且这几天没怎么更新,就不行了,因为原插件判断的依据还是文章发表日期。

      2012-03-27 22:13 回复
  7. 2012新款女鞋

    我的wp博客被我折腾坏了

    2012-03-09 17:28 回复
  8. 淘宝网女装

    我看的是脑袋中全是浆糊…

    2012-03-09 17:01 回复
    • 穷小子

      有那么严重么?我最近准备抽空写个程序,自动替换博客中你这类的留言名称和链接

      2012-03-09 21:35 回复
      • 不亦乐乎

        哈哈哈,我都是直接进垃圾评论的,然后统一删除。

        2012-03-11 15:06 回复
        • 游客 643

          我对我的博客垃圾评论做了处理,有空来试试效果,看看有没有什么错误。。

          2012-03-14 22:58 回复

(必填)

(必填)

(可选)