2016-06-10 60 views
0

如何組合tax_query和meta_query的結果?WP_Query:過濾tax_query或meta_query

ex: tax_query結果爲: Post1,Post2。

and meta_query resutls to: Post3。

我想結合2個查詢的結果。 這裏是我的部分代碼:

'tax_query' => array(
    'relation' => 'AND', 
    array(
     'taxonomy' => 'tax1', 
     'field' => 'term_id', 
     'terms' => array(1,2,3), 
    ), 
    array(
     'taxonomy' => 'tax2', 
     'field' => 'term_id', 
     'terms' => array(1,2,3), 
    ), 
), 
'meta_query' => array(
    array(
     'key'  => 'meta1', 
     'value' => '1', 
     'compare' => '=', 
    ), 
), 

同樣的問題在這裏提出,但沒有得到回答。所以我正在重新打開它。 謝謝!

+1

你想讓它像'OR'那樣返回一個匹配_either_ tax_query或meta_query的帖子嗎? AFAIK,這是不可能使用WP_Query,我只是快速瀏覽[這裏](https://codex.wordpress.org/Class_Reference/WP_Query)和[這裏](https://codex.wordpress.org/Class_Reference/WP_Meta_Query)但你可能想要更詳細的外觀以防萬一。您可能需要[編寫自定義數據庫調用](https://codex.wordpress.org/Class_Reference/wpdb)。你提到的另一個問題是什麼? –

+0

謝謝@TimMalone。這讓事情變得清晰。我所做的是我只是單獨地詢問他們並完成了它。 – japhfortin

+0

沒問題@japhfortin,很高興幫助你!我已將其添加爲幫助未來訪問者的答案。如果您覺得它已經爲您解決了問題,請隨時使用左側的複選標記將答案標記爲已接受。 –

回答

0

這聽起來像是你想讓它像'OR'那樣返回一個匹配tax_querymeta_query的帖子。

不幸的是,這不可能使用WP_Query

您需要編寫一個custom database call,或者只是單獨查詢它們,並在PHP端進行檢查(如果您知道結果數量相對較少,但沒有問題,不一定會擴大到一個巨大的網站)。

0

實現這樣的查詢的唯一方法是使用$wpdb全局和SQL語句創建對數據庫的自定義查詢。我認爲這將是這樣的:

global $wpdb; 
$querystr = 
" 
SELECT * FROM $wpdb->posts 
LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) 
LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id) 
LEFT JOIN $wpdb->term_taxonomy as term_taxonomy1 ON($wpdb->term_relationships.term_taxonomy_id = term_taxonomy1.term_taxonomy_id) 
LEFT JOIN $wpdb->term_taxonomy as term_taxonomy2 ON($wpdb->term_relationships.term_taxonomy_id = term_taxonomy2.term_taxonomy_id) 
LEFT JOIN $wpdb->terms as tax1_term1 ON(term_taxonomy1.term_id = tax1_term1.term_id) 
LEFT JOIN $wpdb->terms as tax1_term2 ON(term_taxonomy1.term_id = tax1_term2.term_id) 
LEFT JOIN $wpdb->terms as tax1_term3 ON(term_taxonomy1.term_id = tax1_term3.term_id) 
LEFT JOIN $wpdb->terms as tax2_term1 ON(term_taxonomy2.term_id = tax2_term1.term_id) 
LEFT JOIN $wpdb->terms as tax2_term2 ON(term_taxonomy2.term_id = tax2_term2.term_id) 
LEFT JOIN $wpdb->terms as tax2_term3 ON(term_taxonomy2.term_id = tax2_term3.term_id) 
WHERE 
(
    (
     (term_taxonomy1.taxonomy = 'tax1') 
     AND 
     (tax1_term1.term_id = 1 AND tax1_term2.term_id = 2 AND tax1_term3.term_id = 3) 
    ) 
    OR 
    (
     (term_taxonomy2.taxonomy = 'tax2') 
     AND 
     (tax2_term1.term_id = 1 AND tax2_term2.term_id = 2 AND tax2_term3.term_id = 3) 
    ) 
) 
OR 
(
    $wpdb->postmeta.meta_key = 'meta1' AND $wpdb->postmeta.meta_value = '1' 
) 
ORDER BY $wpdb->postmeta.meta_value ASC 
" 
$pageposts = $wpdb->get_results($querystr, OBJECT); 

然後你可以遍歷$pageposts作爲一個WP_Query循環。

相關問題