get_posts assigned to a specific custom taxonomy term, and not the term’s children

Say I have the following taxonomy terms:

Term 1
  Term 1.1
  Term 1.2
Term 2
  Term 2.1

How can I get only posts that are assigned to Term 1 and not include those that are assigned to Term 1.1 or Term 1.2?

For example:

$pages = get_posts(array(
  'post_type' => 'page',
  'numberposts' => -1,
  'tax_query' => array(
    array(
      'taxonomy' => 'taxonomy-name',
      'field' => 'id',
      'terms' => 1 // Where term_id of Term 1 is "1".
    )
  )
);

is also giving me posts that have Terms 1.1 and 1.2 assigned.

Thanks.

4

In looking at the WP_Tax_Query class in /wp-includes/taxonomy.php, I found that there is a ‘include_children’ option which defaults to true. I modified my original get_posts() call with the following, and it works great:

$pages = get_posts(array(
  'post_type' => 'page',
  'numberposts' => -1,
  'tax_query' => array(
    array(
      'taxonomy' => 'taxonomy-name',
      'field' => 'term_id', 
      'terms' => 1, /// Where term_id of Term 1 is "1".
      'include_children' => false
    )
  )
));

List of more query parameters: https://developer.wordpress.org/reference/classes/wp_query/#taxonomy-parameters

Leave a Comment