2017-05-02 29 views
1

私はtax_querymeta_queryの間で与えるか、または関係たいにおけるする:どのように与えるか、または関係tax_queryとmeta_query Wordpressの

$post_args = array('post_type' => 'post', 
    'order'  => 'DESC', 
    'meta_query' => array(
    'relation' => 'OR', 
      array(
      'key' => 'client_segment', 
      'value' =>$client , 
      'compare' => 'IN', 
     ), 
      array(
       'key' => 'filtered_date', 
       'value'=> array($start_date, $end_date), 
       'compare' => 'BETWEEN' 
      ) 
     ), 
     'tax_query' => array(
     'relation' => 'OR', 
     array(
      'taxonomy' => 'category', 
      'field'  => 'id', 
      'terms'  => $term_id, 
      'operator' => 'IN') 

      ), 
); 

$posts = new WP_Query($post_args); 

私のコードの何が問題になっているのですか?

答えて

1

2つのクエリ間にOR関係を与える方法はありませんが、2つのクエリを別々に行い、それらの結果をマージする方法はありません。

基本的にこれらのクエリの両方の結果が必要なためです。

あなたはtax_query後にmeta_queryを入れて、 'get_meta_sql' フィルタでWP_Queryをラップし、以下のように、最初のAND ORとを置き換えるソリューション how to merge 2 queries in this post

1

を見つけることができます。

add_filter('get_meta_sql', 'filter_query', 10, 1); 
$posts = new WP_Query($post_args); 
remove_filter('get_meta_sql', 'filter_query'); 

その後、フィルタを最初のANDをORで置き換えます。

function filter_query($sql){ 
    $pos = strpos($sql['where'], 'AND'); 
    if ($pos !== false) { 
     $sql['where'] = substr_replace($sql['where'], 'OR', $pos, strlen('AND')); 
    } 
    return $sql; 
} 

これは高速であり、フィルタリングの時間を節約します照会されたポストをマージした後に複製する。

関連する問題