web-dev-qa-db-ja.com

WP_Query、tax_query、およびterm_meta:方法

カスタムポストタイプの商品(ワイン)があります。以下はそれぞれカスタム分類法です。

  • ヴィンテージ(収穫年)【ワイン1本につき1本】
  • 家族(ぶどう品種)[複数あります]
  • サイズ(ボトルサイズ)[1商品につき1個のみ]

ワインの単一商品ビューで、以下のクエリを実行します。

1)同じファミリー同じサイズを持ちながら、異なるヴィンテージからのワインをすべて探す

2)同じ家族 ANDに属し、同じヴィンテージ ANDを持つすべてのワイン(投稿タイプ:商品)を検索し、異なるサイズを持つ。

今度の問題:数値年ヴィンテージ語のカスタム用語メタプロパティです。 数値ボトルサイズは、サイズ用語のカスタム用語メタプロパティです。

最初のクエリでは、次のことを試しました。

                $other_years = get_posts(array(
                  'post_type' => 'product',
                  'numberposts' => -1,
                  'tax_query' => array(
                    array(
                      'taxonomy' => 'family',
                      'field' => 'id',
                      'terms' => $family->term_id, // Where term_id of Term 1 is "1".
                      'include_children' => false
                    ),
                    array(
                      'taxonomy' => 'size',
                      'field' => 'id',
                      'terms' => $size->term_id, // Where term_id of Term 1 is "1".
                      'include_children' => false
                    ),
                    array(
                      'taxonomy' => 'vintage',
                      'field' => 'id',
                      'terms' => array($vintage->term_id), // Where term_id of Term 1 is "1".
                      'include_children' => false,
                      'operator' => 'NOT IN'
                    ),
                  )
                ));

それは動作します。しかし:term_idを比較する代わりに(ここではヴィンテージの用語ID)用語カスタムメタ値を比較したいのですが(year_numeric)は異なります。

そのようなクエリを実行する可能性はありますか?

1
Blackbam

1つのWP_Query内でそれを達成する方法はないので、最初に問題の年とは異なるを持つterm_idのリストを取得する必要があります。

私は以下であなたがかなり接近すると思います。 (すぐにテストするための環境変数はありません)

$other_years_terms = get_terms(
     'taxonomy'     =>  'vintage',
     'meta_key'     =>  'year_numeric',
     'meta_value'   =>  $the_current_wine_year,   // You'll have to figure that out
     'meta_compare' =>  '!=',
     'fields'       =>  'ids'
);

$other_years_posts = get_posts(array(
              'post_type' => 'product',
              'numberposts' => -1,
              'tax_query' => array(
                array(
                  'taxonomy' => 'family',
                  'field' => 'id',
                  'terms' => $family->term_id, // Where term_id of Term 1 is "1".
                  'include_children' => false
                ),
                array(
                  'taxonomy' => 'size',
                  'field' => 'id',
                  'terms' => $size->term_id, // Where term_id of Term 1 is "1".
                  'include_children' => false
                ),
                array(
                  'taxonomy' => 'vintage',
                  'field' => 'term_id',
                  'terms' => $other_years_terms,
                ),
              )
            ));
4
jgangso

メタキーが存在しない場合を確認していると思います。

この同様の質問を参照してください: メタキーが存在しないすべての投稿を問い合わせる

0
Nick M.