2016-10-29 11 views
0

私は小さなワードプレスの趣味のプロジェクトに取り組んでいます。私はWooCommerceを実装していて、自分のデータにカテゴリとタグを使用しています。Wordpressのフィルタータグとカテゴリ別製品

私は次のようにデータをモデル化するだろう、例えばその関係を知っているいくつかのエントリがあります。

カー#1: カテゴリー=>セダン タグ=>ボルボ

車#2: カテゴリー=>セダン タグ=>ボルボ

車#3: カテゴリー=>セダン タグ=> BMW

これらのWooCommerce製品をフィルタリングしてタグとカテゴリの両方が一致するようにしようとしています。この場合、Car#1はCar#2に関連し、Car#3はOrphanです。

次のように関連製品を取得するときに生成されている現在のクエリは次のとおりです。

SELECT * FROM wp_posts p 
INNER JOIN wp_postmeta pm ON (pm.post_id = p.ID AND pm.meta_key='_visibility') 
INNER JOIN wp_term_relationships tr ON (p.ID = tr.object_id) 

INNER JOIN wp_term_taxonomy tt ON(tr.term_taxonomy_id = tt.term_taxonomy_id) 
INNER JOIN wp_terms t ON (t.term_id = tt.term_id) 
WHERE ((tt.taxonomy = 'product_cat' AND t.term_id IN (14))) 
OR ((tt.taxonomy = 'product_tag' AND t.term_id IN (44))); 

私が使用している場合、クエリは私に正しい結果を与えるORしかし、より多くのデータを、私は1つのだけの基準を満たす結果が得られますそれはうまくいかない。私は問題は、1つのポストごとに1つのタクソノミの行をフェッチするので、上記のクエリでORの代わりにANDを使用すると、うまくいきません。

誰かがこれに対する解決策を知っているか、似たような問題が発生していますか?あるいは、私は製品を構造化すべきであるという良い方法がありますか?

ありがとうございます!

答えて

1

WP_Querytax_queryを使用し、適切なクエリを取得するためにANDの関係を定義します。たとえば、あなたの場合には、このようなものが動作するかもしれません。

$args = array(
    'post_type' => 'product', 
    'tax_query' => array(
     'relation' => 'AND', 
     array(
      'taxonomy' => 'product_cat', 
      'field' => 'slug', 
      'terms' => array('volvo'), 
     ), 
     array(
      'taxonomy' => 'product_tag', 
      'field' => 'slug', 
      'terms' => array('sedan'), 
     ), 
    ), 
); 
$query = new WP_Query($args); 

詳細についてはWordPress Codex on WP_Queryを参照してください。がんばろう!

関連する問題