web-dev-qa-db-ja.com

ACFのWP_Query tax_query post_object

私はカスタム投稿タイプWineを持っています。これはpost_objectリレーションとして他のカスタム投稿タイプProducerにリンクする ACFフィールド を持ちます。私のプロデューサーには、私はRegionという名前のカスタム分類法があります。

今、私がやろうとしているのは、プロデューサーの地域がxであるすべての白ワインを検索することです。

これが私が試したものです:

$args = array(
    'post_type' => 'wines',
    'posts_per_page' => 12,
    'tax_query' => array(
        array(
            'taxonomy' => 'type',
            'field' => 'slug',
            'terms' => 'white'
        ),
        array(
            'taxonomy' => 'region',
            'field' => 'slug',
            'terms' => 'alsace'
        )
    )
);

私が抱えている問題はtax_querywine上で実行されるのであり、producerではないということです。私は WP_Query のドキュメントを見ましたが、それを達成する方法の例を見つけることができません。

誰か私を導いてもらえますか。ありがとう。

更新1

私はそれをmeta_queryに追加するためにプロデューサーのIDのリストを取得しました:

$producers = new WP_Query(
    array(
        'post_type' => 'producers',
        'posts_per_page' => -1
    )
);

$producersIds = wp_list_pluck($producers, 'ID');

その後、メタクエリを追加して$argsを更新しました。

'meta_query' => array(
    array(
        'key' => 'producer',
        'value' => $producerIds,
        'compare' => 'IN'
    )
)
1
Chin Leung

更新1

@Florianが指摘したように、wp_list_pluck関数を使用する必要はありません。IDのリストを取得するためにWP_Queryに'fields' => 'ids'を追加するだけで済みます。

$producers = new WP_Query(
    array(
        'fields' => 'ids',
        'post_type' => 'producers',
        'posts_per_page' => -1,
        'tax_query' => array(
            array(
                'taxonomy' => 'region',
                'field' => 'slug',
                'terms' => 'alsace'
            )
        )
    )
);

それから$ producerIdsby $ producers-> posts`を置き換えてワインを取り出します。

溶液

最初に、私は地域から生産者を回収しなければなりませんでした:

$producers = new WP_Query(
    array(
        'post_type' => 'producers',
        'posts_per_page' => -1,
        'tax_query' => array(
            array(
                'taxonomy' => 'region',
                'field' => 'slug',
                'terms' => 'alsace'
            )
        )
    )
);

次に、 wp_list_pluck を使用してIDのリストを取得します。

$producerIds = wp_list_pluck($producers->posts, 'ID');

そして最後に、プロデューサーのIDを使用してワインを取り出します。

$wines = new WP_Query(
    array(
        'post_type' => 'wines',
        'posts_per_page' => 12,
        'tax_query' => array(
            array(
                'taxonomy' => 'type',
                'field' => 'slug',
                'terms' => 'white'
            )
        ),
        'meta_query' => array(
            array(
                'key' => 'producer',
                'value' => $producerIds,
                'compare' => 'IN'
            )
        )
    )
);
2
Chin Leung