通过文章访问统计插件 WP-PostViews Plus 或者 WP-PostViews,Wordpress都能显示热门文章,可惜这两个插件总有那么一些问题。所以 LD干脆自己写了一个简单PHP函数,通过判断文章留言数,显示热门文章。
函数调用很简单,只要在WP皮肤文件 sidebar.php中加入代码即可。其中函数 simple_get_most_viewed(7, 31); 有两个参数, 第一个是要显示的文章数,第二个是时间段,默认最近一个月。
<h4>当月热门</h4>
<ul>
<?php if (function_exists('simple_get_most_viewed')) { simple_get_most_viewed(7, 31); } ?>
</ul>
函数代码(加入 function.php 文件中):
// 获得热评文章
function simple_get_most_viewed($posts_num=10, $days=30){
global $wpdb;
$sql = "SELECT `ID` , `post_title` , `comment_count` FROM $wpdb->posts
WHERE `post_type` = 'post' AND TO_DAYS( now( ) ) - TO_DAYS( `post_date` ) < $days
ORDER BY `comment_count` DESC LIMIT 0 , $posts_num ";
$posts = $wpdb->get_results($sql);
$output = "";
foreach ($posts as $post){
$output .= "\n<li><a href= \"".get_permalink($post->ID)."\" rel=\"bookmark\" title=\"".$post->post_title."\" >".$post->post_title."</a> - ".$post->comment_count."个评论</li>";
}
echo $output;
}
// 函数 get_permalink($post->ID) 可以得到文章的URL
其实有用的语句只是一句SQL语句:
SELECT `ID` , `post_title` , `comment_count` FROM $wpdb->posts WHERE `post_type` = 'post' AND TO_DAYS( now( ) ) - TO_DAYS( `post_date` ) < $days ORDER BY `comment_count` DESC LIMIT 0 , $posts_num
废话不多说,下面我写几个原版的SQL语句,如果需要修改函数功能,可以参考:
- 查找所有的日志,得到留言最多的10篇, 降序排列:
SELECT `ID` , `post_title` , `comment_count` FROM `wp_posts` WHERE `post_type` = 'post' ORDER BY `comment_count` DESC LIMIT 0 , 10
如果不加判断 `post_type` = ‘post’ ,则得到的包括页面。
- 查找最近一个月的日志,得到留言最多的10篇:
SELECT `ID` , `post_title` , `comment_count` FROM `wp_posts` WHERE `post_type` = 'post' AND TO_DAYS( now( ) ) - TO_DAYS( `post_date` ) < 31 ORDER BY `comment_count` DESC LIMIT 0 , 10
- 查找所有作者ID为 2, 且已经发表的日志,得到留言最多的10篇:
SELECT `ID` , `post_title` , `comment_count` FROM `wp_posts` WHERE `post_type` = 'post' AND `post_status` = 'publish' AND `post_author` = 2 ORDER BY `comment_count` DESC LIMIT 0 , 10
- 查找所有分类ID为 3 的日志,得到留言最多的10篇:
SELECT `ID` , `post_title` , `comment_count` FROM `wp_posts` INNER JOIN `wp_term_relationships` ON (`wp_posts`.`ID` = `wp_term_relationships`.`object_id`) INNER JOIN `wp_term_taxonomy` ON (`wp_term_relationships`.`term_taxonomy_id` = `wp_term_taxonomy`.`term_taxonomy_id`) WHERE 1=1 AND `wp_term_taxonomy`.`taxonomy` = 'category' AND `wp_term_taxonomy`.`term_id` = 3 AND `wp_posts`.`post_type` = 'post' GROUP BY `wp_posts`.`ID` ORDER BY `comment_count` DESC LIMIT 0 , 10
很实用的东西 谢谢了 新年快乐.
收藏先“`牛年快乐哈!
我不是很明白 写的很深奥哦
不错,谢谢你的分享~
”请领导点评:“ 有新意哦 !!
代码我用了哈,谢谢了!!!! 欢迎来随影博客指点,指点!!!
技术文章,来学习下
不错啊谢谢分享,学习一下
成功解决 谢谢
真是太實用的函數了,感謝分享!
不错,只是好多单引号是没用的。不懂点的人,这样直接拷过去没用。
挺好的介绍。
正在找这个呢,实用啊!