私はカスタム投稿タイプ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_query
がwine
上で実行されるのであり、producer
ではないということです。私は WP_Query のドキュメントを見ましたが、それを達成する方法の例を見つけることができません。
誰か私を導いてもらえますか。ありがとう。
私はそれを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'
)
)
@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'
)
)
)
);