2016-10-29 47 views
0

我正在一個小的WordPress的愛好項目,我遇到了一點障礙。我已經實現了WooCommerce,併爲我的數據使用了類別和標籤。WordPress的標籤和類別的過濾器產品

我有一些條目我知道涉及這樣一個實例中,數據將建模如下:

汽車#1: 類別=>轎車 標籤=>沃爾沃

汽車#2: 類別=>轎車 標籤=>沃爾沃

車#3: 類別=>轎車 標籤=>寶馬

我試圖過濾這些WooCommerce產品,以確保這兩個標籤和類別匹配,所以在這種情況下,車#1與車#2和車#3是一個孤兒有關。

獲得相關產品時所產生的電流的查詢如下:

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然而,隨着更多的數據,然後我得到的結果只滿足一個條件這不太合適。我認爲問題在於它只爲每個帖子提取一個分類行,所以當我在上面的查詢中使用AND(在where條件中)而不是OR時,它不起作用。

有沒有人知道這個解決方案或遇到類似的問題?或者,我有更好的方法來構建產品嗎?

謝謝!

回答

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。祝你好運!

相關問題