新的网站里,我需要在某个地方显示最多评论的文章。作为一个定制模板,强行要求用户在使用这个模板前先安装某个插件显然是很不好的,因此我们必须在模板里集成所有用户所需要的功能。废话不多说了,上代码。
function most_popular_posts($no_posts = 10, $before = '<li>', $after = '</li>', $show_pass_post = false, $duration='') {
//定制参数,可以自己修改相关参数,以便写样式
global $wpdb;
$request = "SELECT ID, post_title, COUNT($wpdb->comments.comment_post_ID) AS 'comment_count' FROM $wpdb->posts, $wpdb->comments";
//在数据库里选择所需的数据
$request .= " WHERE comment_approved = '1' AND $wpdb->posts.ID=$wpdb->comments.comment_post_ID AND post_status = 'publish'";
//筛选数据,只统计公开的文章
if(!$show_pass_post) $request .= " AND post_password =''";
if($duration !="") { $request .= " AND DATE_SUB(CURDATE(),INTERVAL ".$duration." DAY) < post_date ";
}
$request .= " GROUP BY $wpdb->comments.comment_post_ID ORDER BY comment_count DESC LIMIT $no_posts";
//按评论数排序
$posts = $wpdb->get_results($request);
$output = '';
if ($posts) {
foreach ($posts as $post) {
$post_title = stripslashes($post->post_title);
$comment_count = $post->comment_count;
$permalink = get_permalink($post->ID);
$output .= $before . '<a href="' . $permalink . '" title="' . $post_title.'">' . $post_title . '</a> (' . $comment_count.')' . $after;
}
//输出文章列表项
} else {
$output .= $before . "None found" . $after;
//没有文章时则输出
}
echo $output;
}
以上代码写在主题的functions.php里,在需要调用最多评论文章的地方添加以下代码:
< ?php most_popular_posts(); ?>
后记:
现在发现很多WordPress玩了有一段日子的老鸟热衷于寻找各种无插件实现XX功能的方法,这些所谓无插件的方法其实很多都是从相关的插件里把函数提取出来的,并且用这个方法为网站添加相关功能会一定程度上造成以后维护比较困难,并且也增加了BUG的风险。
对于一些很简单的功能,例如本文所述的显示最多评论文章,可以把这些简单的功能集成到主题里。但一些复杂的功能,例如AJAX,个人建议还是用插件吧,因为插件的兼容性比专用代码强,而且一般插件作者会负责相关的维护,免除了很多麻烦。
当然在使用一个新插件之前强烈建议现在本地测试一下,看看该插件的功能能否达到自己的要求,有没有明显的BUG等等。有技术的朋友可以修改一下插件的数据存储方法,据本人的经验有些插件写进数据库里的内容是多而乱的,这样的插件要慎用。
转自:http://blog.imbolo.com