I’m trying to merge 2 WP_Query in a new WP_Query and then order all posts in this new merged query by date descending. I can merge 2 WP_Query and work fine, but I can’t order the new query
$args1 = array(
'posts_per_page' => '10',
'post_status' => 'publish',
'post_type' => array('news','partners'),
'orderby' => 'date',
'order' => 'DESC'
);
$queried_post1 = new WP_Query($args1);
$args2 = array(
'posts_per_page' => '10',
'post_status' => 'publish',
'post_type' => array('post'),
'orderby' => 'date',
'order' => 'DESC',
'tax_query' => array(array(
'taxonomy' => 'tax',
'field' => 'id',
'terms' => '5'
))
);
$queried_post2 = new WP_Query($args2);
$merged_queried_post = new WP_Query();
$merged_queried_post->posts = array_merge($queried_post1->posts,$queried_post2->posts);
$merged_queried_post->post_count = $queried_post1->post_count + $queried_post2->post_count;
In this point, I need to order all posts in $merged_queried_post by date.
Thanks for help
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
A better approach could be using three queries. First two query retrieve the post ids, and third one query post by ids.
// first query
$first_ids = get_posts( array(
'fields' => 'ids',
'posts_per_page' => '10',
'post_status' => 'publish',
'post_type' => array('news','partners'),
'orderby' => 'date',
'order' => 'DESC'
));
// second query
$second_ids = get_posts( array(
'fields' => 'ids',
'posts_per_page' => '10',
'post_status' => 'publish',
'post_type' => array('post'),
'orderby' => 'date',
'order' => 'DESC',
'tax_query' => array(array(
'taxonomy' => 'tax',
'field' => 'term_id',
'terms' => array(5)
))
));
// merging ids
$post_ids = array_merge( $first_ids, $second_ids);
// the main query
$query = new WP_Query(array(
'post_type' => 'any',
'post__in' => $post_ids,
'orderby' => 'date',
'order' => 'DESC'
));
if( $query->have_posts() ):
// here you go
endif;
Method 2
Just one notification… this query is work for me also.. but if you use sticky post.. do not forget to add ‘ignore_sticky_posts’ => 1, and also you forget to add while – endwhile … this was issues with my query … so the “the main query” will be
// the main query
$query = new WP_Query(array(
'post_type' => 'any',
'post__in' => $post_ids,
'orderby' => 'date',
'order' => 'DESC',
'ignore_sticky_posts' => 1
));
if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post();
echo the_title().'<br>';
endwhile; endif;
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0