web-dev-qa-db-ja.com

親の分類法を取得する方法

  • "Artist"と "Concert"の2種類の税関があります。
  • "コンサート"カスタム投稿タイプは、 "アーティスト"カスタム投稿タイプの子です。
  • 「Artist」カスタム投稿タイプには「ジャンル」分類があります。

私がやろうとしていること(例えば): "ポップ"ジャンルのアーティストに属するすべてのコンサートをリストアップする。

これが私の夢の質問です。

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

私は現在、post_parent_termのようなことはないと思います、私が間違っていることを願っています... "コンサート"カスタム投稿タイプと出来上がり!しかし、それを達成するための別の方法があるかどうかを知りたいのは私は本当に興味があります。

事前に感謝します。

2
inwpitrust

私がやろうとしていること(例えば): "ポップ"ジャンルのアーティストに属するすべてのコンサートをリストアップする。

あなたは2つのステップでそれをすることができます:

// 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引数がありますが、それ は配列 を受け入れないため、直接問い合わせになります。

3
scribu

親ページは$ post-> post_parentに保存されます。

そのため、親の投稿をそのようにして取得してから、分類/カテゴリ/タグ情報を要求できます。

0
J. Taylor

それが正しい方法であるかどうかはわかりませんが、ネストしたループを作成できます。

//まずポップという用語ですべてのアーティストを取得する

$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