【问题标题】:how to Sort posts by Most Recent and Most Commented filters?如何按“最近”和“最多评论”过滤器对帖子进行排序?
【发布时间】:2011-09-10 00:18:30
【问题描述】:

如何按最新和评论最多的过滤器对帖子进行排序?

例如http://goo.gl/K9sXz

更多示例:http://goo.gl/SjYjs

我在这方面找到了很多但失败了

请帮帮我:)

【问题讨论】:

    标签: wordpress


    【解决方案1】:

    我已经回答了类似的问题here,但我会总结一下我认为对您有帮助的内容。它将涉及自定义查询,您可以详细了解here

    您可以使用单独的“div”元素按不同的方法对每个帖子进行排序。然后您可以使用 jQuery 将它们全部隐藏(除了说“最近的”面板)。然后,当用户使用 jQuerys .click() 事件处理程序单击它(隐藏所有其他元素)时,您可以使用链接显示相关的“div”元素。

    要使用按各种方法排序的帖子填充每个“div”元素,您可以使用自定义查询。例如,要按 cmets 的数量排序,请在“functions.php”文件中定义此函数。

        function get_most_commented($limit=10) {
        global $wpdb;
    
       $most_commented = $wpdb->get_results("SELECT comment_count, ID, post_title FROM $wpdb->posts WHERE post_type='post' AND post_status = 'publish' ORDER BY comment_count DESC LIMIT 0 , $limit");
    
       foreach ($most_commented as $post) {
            setup_postdata($post);
            $id = $post->ID;
            $post_title = $post->post_title;
            $count = $post->comment_count;
            $output .= '<li><h1><a href="'. get_permalink($id).'">'.$post_title.' - '.$count.' comments</a></h1> post_excerpt;</li>';
        }
        return $output;
    }
    

    然后你在上面的相关'div'元素中调用函数:

    <?php echo get_most_commented(15) ?>
    

    在有序/无序列表中(显示评论最多的 15 个帖子)。此示例仅输出标题和摘录,但您可以更改 HTML,并使用一些 CSS 样式来获得您想要的内容。

    希望这会有所帮助!不过,您现在启发了我写一篇关于这方面的教程!

    编辑: 我刚刚查看了您提供的 Nettuts 示例-他们使用 php 'GET' 方法对帖子进行了“重新排序”。单击链接后,您将被发送到同一页面,但获取变量不同(例如:recent=true、commented=true)。该页面包含一系列 php if 语句,用于确定帖子应如何排序,具体取决于哪个 GET 变量设置为“true”。

    这比不需要 jQuery(或者实际上打开了 javascript)具有优势 - 它不会一次加载所有三种排序方法 - 只加载它需要的一种。

    【讨论】:

    • 我把上面的代码放在function.php中然后把这个代码&lt;?php get_most_commented(15);?&gt;上面&lt;?php if (have_posts()) : $count = 0; ?&gt; &lt;?php while (have_posts()) : the_post(); $count++; ?&gt; &lt;!-- search item -- &gt; &lt;?php endwhile; else: ?&gt; &lt;?php endif; ?&gt;(存档/搜索页面)我看不到搜索/存档页面(search.php)的任何变化?
    • 我正在使用此代码来获取观看次数最多的帖子&lt;?php query_posts('meta_key=post_views_count&amp;orderby=meta_value_num&amp;posts_per_page=3&amp;order=DESC'); if ( have_posts() ) : while ( have_posts() ) : the_post(); ?&gt; 我想在排序帖子查询中添加“观看次数最多”(post_views_count)选项卡以及“评论次数最多”请帮助我,我会尝试很困惑:)
    • 您是否希望人们能够对搜索结果进行排序?如果是这样,您必须在查询中包含搜索词。如果这只是对所有(或您的前 15 个帖子)进行排序,那么您需要将其放入您的 index.php 文件中。
    • 另外,我忘记在 [code](get_most_commented(15)) 之前添加 [code](echo)。这不像 [code](query_posts) 那样工作。相反,输出是一个字符串,它应该是进入有序/无序列表标签的 HTML。至于使用查询帖子按视图排序 - 我认为这是存储为元值。这意味着您不能使用 [code](query_posts),因为您正在“加入”表。
    • “评论最多的帖子”和“观看次数最多的帖子”我已经有了这些代码,我只是想让人们对搜索结果进行排序,比如上面的图片或网络 tuts :) 我试过你的代码来获得最多评论的帖子但我要对结果进行排序,这就是我想知道的第二个例子test.nattywp.com/polemic/category/blog/category-4 如果你写任何 tuts 请分享链接:)
    【解决方案2】:

    我明白你现在在追求什么。在阅读了一下之后,我意识到了一种更好的(最好的?)方法。这与我的第一个答案完全不同,因此我将其作为第二个答案发布。

    我已经写了一个详细的教程here。简而言之,您定义指向您所在页面的链接,但使用 GET 变量告诉 WordPress 以某种方式对帖子进行排序。默认情况下,WordPress 按日期排序,但附加

    ?&orderby=comment_count&order=desc
    

    到 url 它会以不同的方式对其进行排序(在这种情况下按 cmets 的数量)。帖子视图有点不同,因为这是一个自定义字段(您仍然需要 wp-post 视图插件)。

    希望这会有所帮助!

    【讨论】:

    • 我认为它有点慢。我遇到了麻烦!我现在刚试了一下,好像还可以。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多