Merge 2 args in one WP_Query and order it by date

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

2 Answers
2

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;

Leave a Comment