2014-04-17 47 views
0

我想爲wp_query構建一組動態參數,但是這樣做存在實際問題。看看下面的例子代碼(不工作)...帶有可變數量參數的wp_query

$args = array(
    'numberposts' => -1, 
    'posts_per_page' => -1, 
    'post_type' => 'skills', 
    'meta_query' => array(
     'relation' => 'OR', 
     array(
      'key' => 'years', 
      'value' => 'Primary', 
      'compare' => 'LIKE' 
     ), 
     array(
      'key' => 'years', 
      'value' => 'Secondary', 
      'compare' => 'LIKE' 
     ) 
    ) 
); 

// get results 
$the_query = new WP_Query($args); 

的想法是,根據用戶輸入的表單中的結果,在我meta_query值子句的數目會改變。在上面的代碼中有兩個選項,但可能取決於輸入有3個或另一個時間5.

我試圖在$ args的外部編譯這些內部數組元素。在下面的代碼中假設$ inputArray是一個字符串元素的單維數組。測試看起來像:

$inputArray=array(); 
if (is_array($yearsArray)){ 
    foreach($yearsArray as $year) { 
     $inputArray[]=array('key' => 'years','value' => $year,'compare' => 'LIKE'); 
    } 
} 



// args 
$args = array(
    'numberposts' => -1, 
    'posts_per_page' => -1, 
    'post_type' => 'skills', 
    'meta_query' => array(
     'relation' => 'OR', 
     $inputArray 
    ) 
); 

但查詢只是運行,就好像沒有應用meta_query查詢。

我也嘗試使用函數wp_parse_args來嘗試合併多個meta_queries,但它似乎覆蓋了該值,並且只有最後一個被使用。這看起來像這樣:

// args 
$args = array(
    'numberposts' => -1, 
    'posts_per_page' => -1, 
    'post_type' => 'skills' 

); 

$args2 = array(
    'meta_query' => array(
     'relation' => 'OR', 
     array(
      'key' => 'years', 
      'value' => 'Secondary', 
      'compare' => 'LIKE' 
     ) 
    ) 
); 
$args3 = array(
    'meta_query' => array(
     'relation' => 'OR', 
     array(
      'key' => 'years', 
      'value' => 'Primary', 
      'compare' => 'LIKE' 
     ) 
    ) 
); 

$args=wp_parse_args($args,$args2,$args3); 

所以,你可以看到我已經嘗試了幾種不同的方法,但都沒有工作。任何人都可以協助

回答

0

我通過發現可以使用IN作爲比較子句來解決這個問題。 $ yearsArray只是一個字符串值的單維數組。

$args = array(
    'numberposts' => -1, 
    'posts_per_page' => -1, 
    'post_type' => 'skills', 
    'meta_query' => array(
     array(
      'key' => 'years', 
      'value' => $yearsArray, 
      'compare' => 'IN' 
     ) 
    ) 
);