按最近发布的帖子分类的循环

时间:2016-04-08 作者:user300979

我在寻找一种方法来循环浏览类别,然后在一个容器中显示每个类别的最新帖子,但我需要一种方法来排序那些拥有最新帖子的类别

因此,如果类别C有一篇较新的帖子,那么它将首先出现在类别a之前

        $args = array(
           \'hide_empty\'=> 1
        );
        $categories = get_categories($args);
        foreach($categories as $category) { 
                    $the_query = new WP_Query(array(
                        \'post_type\' => \'article\',
                        \'posts_per_page\' => 100,
                        \'category_name\' => $category->slug
                    ));

                    while ( $the_query->have_posts() ) : 
                    $the_query->the_post(); ?>
                       // post studd
                    endwhile;
        }

1 个回复
最合适的回答,由SO网友:Adam 整理而成

首先设置一个函数,稍后与usort一起使用,以按最近帖子的日期对类别进行排序:

    function orderByDate( $a, $b ) {
        return strtotime($a[\'date\']) - strtotime($b[\'date\']);
    }
按原样获取类别:

    $args = array(
       \'hide_empty\'=> 1
    );
    $categories = get_categories($args);
    $categoriesWithDates = array(); // Create an array variable to be used in a moment
    $counter = 0;
    foreach($categories as $category) { 
        $the_query = new WP_Query(array(
            \'post_type\' => \'article\',
            \'posts_per_page\' => 1, //This time only get one post
            \'category_name\' => $category->slug,
            \'order\' => \'DESC\'
        ));
在while循环中,我们创建了一个数组,其中包含类别slug及其最近发布的日期:

        while ( $the_query->have_posts() ) : 
            $the_query->the_post();
            $categoriesWithDates[$counter] = array(\'slug\' => $category->slug, \'date\' => get_the_date(DATE_RFC2822));
        endwhile;
      $counter++;
    }
    wp_reset_query();
使用按日期对类别排序usort 以及功能orderByDate()

    usort($categoriesWithDates, "orderByDate");
创建一个新的循环来显示帖子,这次使用新创建的并按日期排序的数组,即带有日期的类别。这将按最新帖子的顺序对类别进行排序,因此使用foreach将其放入查询将按您希望的顺序显示类别:

    foreach($categoriesWithDates as $categoryWithDate) { 
                $the_query = new WP_Query(array(
                    \'post_type\' => \'article\',
                    \'posts_per_page\' => 100,
                    \'category_name\' => $categoryWithDate[\'slug\']
                ));

                while ( $the_query->have_posts() ) : 
                $the_query->the_post();
                  // Post studd 
                endwhile;
    }
也许有一种更好的方法可以将这一切编入一个循环,但这需要更多的思考,无论如何,这应该会让您开始!像这样的东西应该可以奏效,尽管我还没有测试过。

编辑:

我添加了一个计数器,我认为这可能有助于解决问题。此外,我已将日期格式设置为get_the_date() 迄今为止\\u RFC2822(参见:http://php.net/manual/en/function.date.php). 而且wp_reset_query(); 已在两个查询之间添加。