Ce que j'essaie de faire (par exemple): listez tous les concerts qui appartiennent à des artistes du genre "pop".
Voici la requête de mon rêve:
SELECT * FROM posts WHERE post_type = "concert" AND post_parent_term = "pop"
Je pense qu’à l’heure actuelle, il n’existe pas post_parent_term , espérons que je me trompe ... "Concert" tapez "post" et voilà! Mais je suis vraiment curieux de savoir s’il existe un autre moyen d’y parvenir).
Merci d'avance.
Ce que j'essaie de faire (par exemple): listez tous les concerts qui appartiennent à des artistes du genre "pop".
Vous pouvez le faire en deux étapes:
// 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
" );
Il y a un argument post_parent dans WP_Query, mais il n'accepte pas de tableau , d'où la requête directe.
La page parent est stockée dans $ post-> post_parent
Ainsi, vous pouvez simplement saisir le message parent de cette manière, puis lui demander ses informations de taxonomie/catégorie/tag.
Je ne sais pas si c'est la bonne façon, mais vous pourriez créer des boucles imbriquées:
// commence par obtenir tous les artistes avec le terme 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;
}
}