• I have 2 customs post type : “Artist” and “Concert”,
  • the “Concert” custom post type is the child of the “Artist” custom post type,
  • the “Artist” custom post type has a “genre” taxonomy.

What I’m trying to do (for instance): list all the concerts which belong to artists of the “pop” genre.

Here is the query of my dream:

SELECT * FROM posts WHERE post_type = "concert" AND post_parent_term = "pop"

I think currently there is no such thing as post_parent_term, hope I’m wrong …
(I know i can add the “genre” taxonomy to the “Concert” custom post type and voilà! But I’m really curious to know if there is another way to achieve that).

Thanks by advance.

3 Answers
3

What I’m trying to do (for instance):
list all the concerts which belong to
artists of the “pop” genre.

You can do it in two steps:

// 1. Get all the pop artist IDs
$artist_ids = get_posts( array(
  'fields' => 'ids',
  'post_type' => 'artist',
  'genre' => 'pop'
) );

// 2. Get all the concerts associated to those artists
$artist_ids = implode( ',', array_map( 'absint', $artist_ids ) );

$concerts = $wpdb->get_results( "
  SELECT * FROM $wpdb->posts
  WHERE post_type="concert"
  AND post_status="publish"
  AND post_parent IN ({$artist_ids})
  ORDER BY post_date DESC
" );

There’s a post_parent argument in WP_Query, but it doesn’t accept an array, hence the direct query.

Leave a Reply

Your email address will not be published. Required fields are marked *