我试图做一个查询,从一个特定类别中获取所有帖子,按作者对它们进行排序/分组,并在每个组中对帖子进行描述。最后,最新帖子的作者将位于输出列表的顶部。
这是我现在使用的,但这些帖子并没有按我需要的顺序排列。
$args = array (
\'post_type\' => \'post\',
\'orderby\' => \'author\',
\'category_name\' => \'cat\',
);
$query = new WP_Query($args);
$old_author = 0;
if ($query -> have_posts()) : while ($query->have_posts()) : $query->the_post();
if($post->post_author != $old_author): //check if author changed
the_author();
the_title();
else:
the_title();
endif;
$old_author = $post->post_author;
endwhile;
endif;
我确实尝试在查询之前按日期对查询进行排序,但“then the author”组不再起作用。
add_action(\'pre_get_posts\',\'sort_query\');
function sort_query( $query ) {
if( !$query->is_main_query() ) {
$query->set( \'orderby\', \'date\' );
}
}
最合适的回答,由SO网友:Pieter Goosen 整理而成
编辑2我在编辑1中的想法不起作用,所以我放弃了它。这次编辑我使用foreach循环对返回的数组进行排序,根据特定作者下的日期对帖子进行排序,顶部的作者拥有最新的帖子。
下面的代码经过测试并正常工作,因此您可以尝试以下操作
$args = array (
\'category_name\' => \'cat\',
);
$query = new WP_Query($args);
if ( $query->have_posts() ) {
foreach ( $query->posts as $post_object ) {
$new_array[$post_object->post_author][] = $post_object;
}
foreach ( $new_array as $k=>$v ) {
echo get_the_author_meta( \'display_name\', $k ) . \'</br>\';
foreach ( $v as $post ) {
setup_postdata( $post );
the_title();
echo \'</br\'>;
}
wp_reset_postdata();
}
}
根据您的评论编辑1,无论是我原始答案中描述的方法还是
\'orderby\' => \'date author\';
---
SCRAPPING NOTICE---
此编辑已废弃
我的评论中有一个脑力缺陷,我已经删除了。你最好的办法就是尝试新的orderby
参数语法(Wordpress 4.0附带了这种新语法)。
您可以尝试这样的方法(未经测试)
\'orderby\' => \'author date\',
记住相应地调整循环,以删除循环内的订单
请注意,您需要非常小心地使用pre_get_posts
. 当你使用它时,它会改变all 所有页面上的自定义查询,前端and 后端