2015-10-06 27 views
1

我的問題非常簡單,我試圖從「插件」中獲取投資組合帖子和擁有「投資組合」類別(使自己)的文章。WordPress - 使用WP_Query的SQL請求,在post_type和taxonomy之間使用OR

$args = array(
    'post_type' => 'portfolio', 
    'tax_query' => array(
     array(
      'taxonomy' => 'category', 
      'field' => 'slug', 
      'terms' => 'portfolio', 
     ) 
    ) 
); 

$query = new WP_Query($args); 

它看起來像post_type和tax_query之間的關係是AND,我需要一個OR,我該怎麼做?

我試過以下官方文檔,但我卡住了。 (https://codex.wordpress.org/Class_Reference/WP_Query) 感謝您的幫助。

回答

0

這裏是一個關係「或」一個例子:

$args = array(
    'post_type' => 'portfolio', 
    'meta_query' => array(
     'relation' => 'OR', /* <-- here */ 
     array(
      'key' => 'color', 
      'value' => 'blue', 
      'compare' => 'NOT LIKE' 
     ), 
     array(
      'key' => 'price', 
      'value' => array(20, 100), 
      'type' => 'numeric', 
      'compare' => 'BETWEEN' 
     ) 
    ) 
); 
$query = new WP_Query($args); 
+0

這使兩個元查詢之間的OR,對嗎?所以基本上,如果顏色不是藍色或價格在20到100之間。但它仍然是一個AND與port_type =「投資組合」。 – Vadorequest

+0

@Vadorequest我認爲你必須做兩個不同的WP_Query併合並結果。 – vard

+0

認真嗎?這正是我不應該做的。這是一個非常糟糕的習慣,我甚至不知道如何合併結果,因爲WP_Query返回的是一個對象,而不是數組。我想過,但我寧願用一個查詢來完成,如果我使用正確的SQL字符串,那就是我要做的。 – Vadorequest

0

我還沒有發現只使用一個查詢的任何解決方案。 (無法將AND更改爲OR)。

所以我做了兩個查詢,而不是:

$query1 = new WP_Query(array('post_type' => 'portfolio')); 
$query2 = new WP_Query(array(
    'tax_query' => array(
     array(
      'taxonomy' => 'category', 
      'field' => 'slug', 
      'terms' => 'portfolio', 
     ) 
    ))); 

$query = merge_WP_queries($query1, $query2); 

function merge_WP_queries(WP_Query $query1, WP_Query $query2){ 
    $wp_query_returned = new WP_Query(); 
    $wp_query_returned->posts = array_merge($query1->posts, $query2->posts); 

    //populate post_count count for the loop to work correctly 
    $wp_query_returned->post_count = $query1->post_count + $query2->post_count; 

    return $wp_query_returned; 
} 

它正常工作,即使它不是想什麼,我使用。

相關問題