web-dev-qa-db-fra.com

Comment obtenir la taxonomie du parent?

  • J'ai 2 types de poste de douane: "Artiste" et "Concert",
  • le type de message personnalisé "Concert" est l'enfant du type de message personnalisé "Artiste",
  • le type de message personnalisé "Artiste" a une taxonomie "genre".

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.

2
inwpitrust

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.

3
scribu

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.

0
J. Taylor

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;
    }
}
0
Bainternet