1. <div id="11111"></div>

    1. <div id="11111"></div>

      1. <div id="11111"></div>

        WordPress输出评论最多的10篇文章

        日期: 标签:WordPress教程 22 条留言
        如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务:  点此联系我

             你可能会注意到露兜博客侧边栏有一些文章展示栏目,如最新文章、热门文章和随机文章等,在你的博客主题中多多少少会展示一些这样的栏目。今天,我将教你如何添加"评论最多"的文章栏目,在该栏目中将列出你博客中评论数量最多的10篇文章。当然,有很多插件能够实现这样的功能,如果你有能力更改主题代码或者对编程感兴趣,最好还是自己动手编写一下代码,自己动动手向来都不是件坏事,而且你看完本文会觉得这也不是件难事。

             要实现这个功能就要查询博客数据库,我们将使用$wpdb->get_results()方法,我们只需向它传递一个SQL查询语句作为参数即可:

        <?php $pop = $wpdb->get_results("SELECT id, post_title, comment_count 
        FROM {$wpdb->prefix}posts 
        WHERE post_type='post' AND post_status='publish' AND post_password='' 
        ORDER BY comment_count DESC LIMIT 10"); ?>

             这里解释一下该查询语句的作用。这条语句从WordPres博客数据库文章表中查询文章的id,标题和评论数,限定只返回10篇公开的且未加密的文章(你可以修改语句的10,控制文章数量),文章按评论数从多到少排序。因为WordPress允许我们自定义数据库表的前缀,所以可能不同的博客的数据库表前缀会不太一样,所以这里为了提高兼容性,用{wpdb->prefix}posts表示posts表,在大多数博客的数据库中,该表都是"wp_posts"。

             SQL语句已经写好,我们就可以一个foreach选好输出查询结果了:

        <?php $pop = $wpdb->get_results("SELECT id, post_title, comment_count 
        FROM {$wpdb->prefix}posts 
        WHERE post_type='post' AND post_status='publish' AND post_password='' 
        ORDER BY comment_count DESC LIMIT 10"); ?>
        <ul>
        <?php foreach($pop as $post) : ?>
        <li><?php echo $post->post_title; ?> </li>
        <?php endforeach; ?>
        </ul>

        输出结果:
        <ul>
        <li>文章标题1</li>
        .....
        <li>文章标题10</li>
        </ul>

             现在你自己修改一下你的sidebar.php,看看有什么结果?这里只输出了评论最多的10文章的标题,你可以根据需要使用以下的变量输出你想要的结果:

        • $post->id : 文章的id
        • $post->post_title : 文章标题
        • $post->comment_count : 文章评论数

             如果你想要获取文章的URL地址,你可以在以上SQL语句添加"guid"列的查询,或者更简单的,使用get_permalink($post->id)方法,只需向它传递$post->id参数即可。

             最后提供几个完善的代码,以及输出样例,你可以在sidebar.php中直接使用。

        示例一:

        <?php $pop = $wpdb->get_results("SELECT id, post_title, comment_count 
        FROM {$wpdb->prefix}posts 
        WHERE post_type='post' AND post_status='publish' AND post_password='' 
        ORDER BY comment_count DESC LIMIT 10"); ?>
        <ul>
        <?php foreach($pop as $post) : ?>
        <li><a href="<?php echo get_permalink($post->id); ?>"><?php echo $post->post_title; ?></a></li>
        <?php endforeach; ?>
        </ul>

        输出结果:
        <ul>
        <li><a href="URL1">文章标题1</a></li>
        .....
        <li><a href="URL10">文章标题10</a></li>
        </ul>

        示例二:

        <?php $pop = $wpdb->get_results("SELECT id, post_title, comment_count 
        FROM {$wpdb->prefix}posts 
        WHERE post_type='post' AND post_status='publish' AND post_password='' 
        ORDER BY comment_count DESC LIMIT 10"); ?>
        <ul>
        <?php foreach($pop as $post) : ?>
        <li><a href="<?php echo get_permalink($post->id); ?>"><?php echo $post->post_title.'('.$post->comment_count.')'; ?></a></li>
        <?php endforeach; ?>
        </ul>

        输出结果:
        <ul>
        <li><a href="URL1">文章标题1(评论数)</a></li>
        .....
        <li><a href="URL10">文章标题10(评论数)</a></li>
        </ul>

         

        结语:

             以上代码均在我的博客上测试过,WordPress版本 2.9.2

             一旦你掌握了如何直接与WordPress数据库打交道,你可以做的事情那可就多了,以上内容也只是冰山一角!

             本文只是演示如何从WordPres数据库表中查询你想要的数据。但是事实上,如果你用的是WordPress 2.9及以上版本,你完全可以使用query_posts()函数,只需传递参数orderby=comment_count即可。不管用用哪种方法,都归结为一点:向数据库发起一次SQL查询。

         

        参考文章:

        Quick Tip: "Popular Posts By Comment Count" SQL Query in WordPress

        -- 完 --

        本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
        原文出处:露兜博客 http://www.szeverich.net.cn/popular-posts-by-comment-count-sql-query-in-wordpress.html
        露兜
        kaapass@outlook.com  QQ 825533758

        业余编程爱好者,主业是淘宝店主,卖些工艺品,感兴趣可以到我的淘宝店看看(旺旺不提供技术咨询):西西弗sisyphe

        22 条留言

        点此留言
        1. 萨达

          大师你专业的还是自学成才?

          • Ludou

            @萨达 有专业成份,也有自学的。

        2. wwanghee

          最近研究wp,有php基础,看了你的博客,有不少收获。希望以后能多交流。

        3. 棺材中的尘埃

          这个太专业了;(还要进入数据库。。?;帕?!哈哈

        4. 棺材中的尘埃

          不过想来听听你的建议,我新的主题,你觉得什么地方能优化一些呢?现在看上去感觉还是很难受!

          • Ludou

            @棺材中的尘埃 我本来对设计就不在行。我的审美观向来都是有悖大众的。以我这个一个普通人的视角出发,感觉新主题有点紧凑,页面比较杂乱。

        5. Banio

          大师 你这代码插件是什么 看起来这么棒

        6. Dianso

          谢了,我用上了

        7. 优得客

          很好,谢谢,我正好要试试玩一下呢

        8. N

          如果我想显示评论最少的文章呢?

          • Ludou

            @N 把代码中的 DESC 改成 ASC

        9. 小军

          怎么实现在右边栏里添加热门文章和随机文章这些呢?还有一点的就是我想让我的回复不显示在近期评论中?怎么搞呢?上次我有搞过不现在现在给找不到是在那里的!

          • Ludou

            @小军 我看了你的博客,看来问题已经解决了

        10. wicen

          用了,感谢楼主,很细心。

        11. wuchj

          博主,您好,我想在显示热门文章的同时,也可以显示该文章的缩略图,但是插件中只能使用%VIEW_COUNT%;%POST_TITLE%;%POST_EXCERPT%;%POST_CONTENT%;%POST_URL%,自己尝试的修改了下,但老是出错,请博主帮忙实现,谢谢?。?!

        12. 初体验

          小工具中最新评论
          有8个评论数量
          想改为6个
          不知道代码在哪,不知道能教下吗,谢谢了

          • Ludou

            @初体验 后台 – 外观 – 小工具,右边栏中已经添加了近期评论小工具,那就点开它,有个“显示评论的数量:”,自己填!

        13. ZXC

          请问 文中说道 "所以这里为了提高兼容性,用{wpdb->prefix}posts表示posts表,在大多数博客的数据库中,该表都是"wp_posts"。"
          get_results("SELECT id, post_title, comment_count FROM wp_posts

          还是说 get_results("SELECT id, post_title, comment_count FROM $wpdb->wp_posts

          这两个哪个对?

          • 露兜

            @ZXC $wpdb->wp_posts和{wpdb->prefix}posts
            这两种用法都是正确的

        发表留言

        可以挣钱的游戏 358| 866| 438| 492| 718| 983| 360| 132| 569| 191| 990| 685| 19| 654| 152| 570| 214| 908| 177| 623| 129| 877| 501| 126| 165| 611| 12| 630| 768| 440| 39| 270| 377| 142| 782| 449|