Как получить таксономию родителей?

  • У меня есть 2 типа таможенного поста: «Исполнитель» и «Концерт»,
  • пользовательский тип сообщения «Концерт» является дочерним по типу персонализированного типа «Исполнитель»,
  • у пользовательского типа «Художник» есть «жанр» таксономии.

То, что я пытаюсь сделать (например): перечислить все концерты, принадлежащие художникам жанра «поп».

Вот вопрос моей мечты:

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

Я думаю, что в настоящее время нет такой вещи, как post_parent_term , надеюсь, что я ошибаюсь … (Я знаю, что могу добавить таксономию жанра к типу пользовательских сообщений «Концерт» и вуаля! Но мне действительно интересно узнать, есть еще один способ добиться этого).

Спасибо заранее.

Solutions Collecting From Web of "Как получить таксономию родителей?"

То, что я пытаюсь сделать (например): перечислить все концерты, принадлежащие художникам жанра «поп».

Вы можете сделать это в два этапа:

 // 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 " ); 

В WP_Query есть аргумент post_parent, но он не принимает массив , следовательно, прямой запрос.

Родительская страница хранится в $ post-> post_parent

Таким образом, вы можете просто захватить родительский пост таким образом, а затем запросить его для информации о таксономии / категории / теге.

Не уверен, что это правильный путь, но вы можете создать вложенные циклы:

// сначала получим всех художников с термином pop

 $args = array( 'tax_query' => array( array( 'taxonomy' => 'genre', 'field' => 'slug', 'terms' => 'pop' )) 'post_type' => 'Artist', 'posts_per_page' => -1 ); $Artists = new WP_Query( $args ); //loop through them and get there child posts of concerts if ( $Artists->have_posts() ) { while ( $Artists->have_posts() ) { $Artists->the_post(); $last_artist = $post; $Concerts = new WP_Query(); $Concerts->query(array( 'post_type' => 'concert', 'posts_per_page' => -1, 'post_parent' => $post->ID )); while ( $Concerts->have_posts() ) { $Concerts->the_post(); //do concert stuff here //the_title(); //the_content(); } wp_reset_postdata(); $post = $last_artist; } }