How to query posts from specific authors and categories using WP_query?

I currently have a WP_query where I am getting posts from a specific set of authors. To this, I want to add specific categories as well.

$args = array( 'author__in' => $authors, 'posts_per_page' => 12, 'paged' => $paged );

$authors is an array containing users’ ids.

Read More

So, I need to query posts from both, authors and categories.

I was thinking about using something like this:

'tax_query' => array(
    'relation' => 'OR',
    array(
        'taxonomy' => 'category',
        'field' => 'id',
        'terms' => array ( $cat_ids ),
    ),
    array(
        'taxonomy', => 'user',
        'field' => 'id',
        'terms' => array( $user_ids ),
    )
)

I know user is not a taxonomy; however, I am looking for something similar that works.

EDIT

Well, I tried this and it is working so far:

$args = array(
  'author__in'     => $authors,
  'category__in'   => $terms,
  'posts_per_page' => 12,
  'paged'          => $paged
);

Is there a better way?

EDIT 2

My previous edit is not working the way I wanted. The caveat is that when only categories are specified, no posts show up.
I need an OR relation.

EDIT 3

I havent been able to find a solution. When I use author_in and category_in for the arguments, wordpress only shows posts from authors and not both. I need to show posts from authors AND categories. What am I doing wrong here?

Related posts

3 comments

  1. Is this what you are looking for?

    $query = new wp_query($arr);
        $arr = array(
            'author__in'=> array(2,4,6), //Authors's id's you like to include
            'posts_per_page' => '12',
            'paged' => $paged,
            'tax_query' => array(
            array(
            'taxonomy' => 'category',
            'field' => 'id',
            'terms' => array ( $cat_ids ),
            )
        )
        );
    
  2. You could try something like this… get_posts_by_author_sql

    Alternatively, if you want to select posts based on authors/categories you could use wpdb. You may be able to use a “JOIN” in the SQL to get the post IDs you need.

  3. maybe you can try this in backend:

    wp-admin/edit.php?author=2 //author is specified
    wp-admin/edit.php?cat=16,25&author=2 //include categories
    

    this test does not appear as you describe, so check whether the value is correct

    $terms = array(16,25);
    //$author = array(2);
    $args = array(
        'author__in'  => isset($author) ? $author : 0,
        'category__in' => isset($terms) ? $terms : ''
        );
    $demos = new WP_Query($args);
    echo "<pre>";
    print_r($demos);
    echo "</pre>";
    

Comments are closed.