首先设置一个函数,稍后与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();
已在两个查询之间添加。