2011-08-18 71 views
4

我正在使用wordpress的meta_query來嘗試構建一個基本的事件系統。Wordpress - meta_query - 可能使用多個或嵌套的meta_query參數?

每個事件都有一些元鍵/值。例如:

Start Date 
End Date 
Ongoing (Yes/No) 

我要分開是正在發生的事件(正在進行=是),而不是持續的(持續=否)。

然後我正在發生的事件中,我要分開是事件:

  1. 起兩個星期內,兩個星期
  2. 已經開始內即將結束,兩週以上

結束我的問題在於案例1,其實質上是:

(Start Date <= Two Weeks OR End Date <= Two Weeks) AND Ongoing == YES 

使用WP_Query,我有以下幾點:

$ongoingSoon = array(
     'category_name' => 'event', 
     'meta_key' => 'End Date', 
     'orderby' => 'meta_value', 
     'order' => 'ASC', 
     'meta_query' => array(
      'relation' => 'AND', 
      array(
       'key' => 'Start Date', 
       'value' => $today, 
       'compare' => '>=' 
      ), 
      array(
       'key' => 'End Date', 
       'value' => $nexttwoweeks, 
       'compare' => '<=' 
      ), 
      array(
       'key' => 'Ongoing', 
       'value' => 'Yes' 
      ) 
     ) 
    ); 

其中僅返回,在未來兩週內開始和還結束持續事件。如果我將關係更改爲OR,那麼它顯示的事件也不是正在進行。有沒有辦法實現我所需要的?

回答

2

由於目前正在編寫meta_query,我99%確定無法做到這一點。

什麼你可以做的就是周圍是創造持續(可能是私人)自定義分類,其作用類似於一個布爾值,而且永遠只使用一個學期(「是」或「1」或其他)。然後,您的WP_Query將更改爲如下所示:

$ongoingSoon = array(
    'category_name' => 'event', 
    'meta_key' => 'End Date', 
    'orderby' => 'meta_value', 
    'order' => 'ASC', 
    'meta_query' => array(
     'relation' => 'OR', 
     array(
      'key' => 'Start Date', 
      'value' => $today, 
      'compare' => '>=' 
     ), 
     array(
      'key' => 'End Date', 
      'value' => $nexttwoweeks, 
      'compare' => '<=' 
     ) 
    ), 
    'tax_query' => array(
     array(
      'taxonomy' => 'ongoing', 
      'field' => 'slug', 
      'terms' => 'yes' 
     ) 
    ) 
);