Home > WordPress > 显示最多评论的文章(无插件版)
2010January . 18th

显示最多评论的文章(无插件版)

终于放寒假了,昨天回到了家里,今天装好电脑后就开始忙一个新的网站了。
怎新的网站里,我需要在某个地方显示最多评论的文章。作为一个定制模板,强行要求用户在使用这个模板前先安装某个插件显然是很不好的,因此我们必须在模板里集成所有用户所需要的功能。废话不多说了,上代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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里,在需要调用最多评论文章的地方添加以下代码:

1
< ?php most_popular_posts(); ?>
后记:

现在发现很多WordPress玩了有一段日子的老鸟热衷于寻找各种无插件实现XX功能的方法,这些所谓无插件的方法其实很多都是从相关的插件里把函数提取出来的,并且用这个方法为网站添加相关功能会一定程度上造成以后维护比较困难,并且也增加了BUG的风险。
对于一些很简单的功能,例如本文所述的显示最多评论文章,可以把这些简单的功能集成到主题里。但一些复杂的功能,例如AJAX,个人建议还是用插件吧,因为插件的兼容性比专用代码强,而且一般插件作者会负责相关的维护,免除了很多麻烦。
当然在使用一个新插件之前强烈建议现在本地测试一下,看看该插件的功能能否达到自己的要求,有没有明显的BUG等等。有技术的朋友可以修改一下插件的数据存储方法,据本人的经验有些插件写进数据库里的内容是多而乱的,这样的插件要慎用。

  1. 2010January . 18th - 10:43 PM

    甚是强悍

  2. 2010January . 18th - 10:56 PM
    Zenoven自由人

    强悍。。。要每个主题制作者都这样的话,估计我们可以省掉很多插件的。。。

  3. 2010January . 18th - 10:57 PM

    好像都是SQL语句之类。。。看来也不是很难 嘎嘎,我也要试试。。。

  4. 2010January . 19th - 8:26 AM

    这么强悍?
    几行代码就可以搞定?

  5. 2010January . 19th - 9:17 AM

    无插件好啊
    我那块是从老男人那挖的,直接丢在了sidebar里面

  6. 2010January . 19th - 9:37 AM

    这个不错,我有用

  7. 2010January . 19th - 11:51 AM

    恩恩,我也是这么干的,另外,很同意后记中所说的

  8. 2010January . 19th - 11:58 AM

    支持原创~
    话说期待一下你的CMS主题,最近在帮老师弄个小CMS,打算用WP

  9. 2010January . 19th - 12:36 PM

    嘻嘻,观摩学习一下,小邪最近还没有习惯使用类来着。

  10. 2010January . 19th - 12:36 PM

    @Zenoven自由人
    如果每个主题作者都这样做的话就失去了很多DIY的趣味了
    @菠萝
    主要是筛选数据然后整理代码,并不复杂
    @A.shun
    如果是函数的话放在functions.php比较好
    @Jutoy
    那个主题我并没有打算发布啊

  11. 2010January . 19th - 12:46 PM

    可以学习啊。O(∩_∩)O哈哈~

  12. 2010January . 19th - 4:51 PM

    MySQL 好久没看了,呼呼。。

  13. 2010January . 19th - 9:25 PM

    无插件确实不错嘀,,

  14. 2010January . 20th - 11:10 AM

    没有插件固然很好,可是对代码不了解

  15. 2010January . 20th - 11:14 AM

    @simaopig
    你是前端工程师了,SQL就交给程序员吧,哈哈
    @网络生活
    我已经测试过了

  16. 2010January . 20th - 11:57 AM

    哦,很好,那就可以放心使用了

  17. 2010January . 20th - 5:11 PM

    直接代码还是放function.php好,我也开始觉得这样方便和比较规范

  18. 2010January . 20th - 7:14 PM

    好东西,收藏了,插件少点还是不错的。

  19. 2010January . 20th - 8:08 PM

    很久没有研究代码了。。。都生疏了

  20. 2010January . 20th - 8:33 PM

    到此一游!(*^__^*) 嘻嘻……

  21. 2010January . 20th - 10:14 PM

    肯定是高人

  22. 2010January . 20th - 10:40 PM

    等下我去抽取下到底哪个最多,能把留言板排除在外吧。

  23. 2010January . 20th - 10:44 PM

    @LAONB
    应该可以吧,如果不行就修改一下SQL

  24. 2010January . 21st - 11:48 AM

    对于每次换模板,是个摧残。

Subscriber selector

Close