WP_QUERY GROUP BY AUTHER和ORDER每个组说明

时间:2015-05-28 作者:CiprianD

我试图做一个查询,从一个特定类别中获取所有帖子,按作者对它们进行排序/分组,并在每个组中对帖子进行描述。最后,最新帖子的作者将位于输出列表的顶部。

这是我现在使用的,但这些帖子并没有按我需要的顺序排列。

$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\' );
 }
}

1 个回复
最合适的回答,由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 后端

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post