2012-08-05 19 views
2

我正在處理即將發生的事件列表。我使用自定義字段創建自定義帖子類型:event_start_date。我還有一些多日擴展事件,由額外的自定義字段定義:event_end_date。簡單的WP查詢即將開始或結束日期的事件

我有一個代碼,可以在今天晚些時候使用start_date來處理事件。但是我沒有納入end_date條件。我嘗試與一個meta_query,與OR關係,目前不工作:

$args = array(
    'post_type' => 'events', 
    'posts_per_page' => 4, 
    'orderby' => 'event_start_date', 
    'order' => 'ASC', 
    'meta_query' => array(
     'relation' => 'OR', 
      array('key' => 'event_start_date', 
       'value' => date('m/d/Y', strtotime('-1 day')), 
       'compare' => '>='), 

       array('key' => 'event_end_date', 
        'value' => date('m/d/Y', strtotime('-1 day')), 
        'compare' => '>=') 
    ) 
); 
$loop = new WP_Query($args); 
while ($loop->have_posts()) : $loop->the_post(); 
// Rest of the loop 

在此先感謝。

注意:我有這個其他的查詢,這完美的選擇事件,只有開始日期>當前日期。

    $args = array(
        'post_type' => 'events', 
        'posts_per_page' => 4, 
        'meta_key' => 'event_start_date', 
        'meta_value' => date('m/d/Y', strtotime('-1 day')), 
        'meta_compare' => '>=', 
        'orderby' => 'event_start_date', 
        'order' => 'ASC',   
        ); // The same loop and query 

回答

0

其實對於由元鍵順序meta-key必須出現在查詢和使用meta_valueorderby值。

$args = array(
    'post_type' => 'events', 
    'posts_per_page' => 4, 
    'meta_key' => 'event_start_date', // required to be used in orderby 
    'meta_query' => array(
     'relation' => 'OR', 
      array(
       'key' => 'event_start_date', 
       'value' => date('m/d/Y'), 
       'compare' => '>' 
      ), 
      array(
       'key' => 'event_end_date', 
       'value' => date('m/d/Y'), 
       'compare' => '>' 
      ) 
    ), 
    'orderby' => 'meta_value', // orderby will use the value of meta_key 
    'order' => 'asc', 
); 
$loop = new WP_Query($args); 

您也可以將您的meta_query的每個陣列中使用類型如下

array(
    'key' => 'event_end_date', 
    'value' => date('m/d/Y'), 
    'compare' => '>', 
    'type' => 'DATE' // to specify the type of the field/value 
) 

更新:您應該使用date('m/d/Y')'compare' => '>'並確保您的數據格式是正確的,因爲現在它在(月/日/年)。 date('m/d/Y', strtotime('-1 day'))也會顯示過去的日期。

這應該工作,如果一切都是正確的。 Read Here

+0

謝謝@謝赫。我測試了您的建議,但不幸的是,結果顯示了所有事件列表,包括過去的事件。我認爲問題可能在於'meta_query'。 -bless – 2012-08-05 15:40:09

+0

檢查更新,謝謝。 – 2012-08-05 16:54:40

+0

仍然無法正常工作,列出了所有事件。我認爲我的日期格式是正確的,因爲我已經開始使用其他只能使用開始日期的「查詢」。爲了以防萬一,我在這個'其他查詢'的參數上面附加了。謝謝。 – 2012-08-05 22:07:54

1

解決方案不適合我(對於舊版本,mybe主題太舊)。 對於下一個搜索者 - 顯示所有過去事件的解決方案(帶分頁)

'post_type' => 'event', 
    'suppress_filters' => false, 
    'meta_key' => '_eventorganiser_schedule_last_start', // OR _eventorganiser_schedule_start_start OR ..._start_finish OR ..._last_finish 
    'meta_value' => date('Y-m-d', strtotime('today')), 
    'meta_compare' => '<', 
    'orderby' => '_eventorganiser_schedule_last_start', 
    'order' => 'DESC', 
    'paged' => get_query_var('paged') 
相關問題