2013-07-15 60 views
3

我有一個自定義帖子類型「events」,其中包含start_date和end_date的自定義字段。我正在嘗試製作即將到來的活動的簡單列表。如果我只查詢一個start_date> =今天的事件,它可以正常工作。如果我在meta_query中添加了「AND」,並且所有事件的結束日期爲< =今天 - 它不返回任何內容。WP_Query meta_query具有2個自定義字段的日期範圍

我的自定義字段(start_date,end_date)存儲爲unix時間戳,這就是我使用'NUMERIC'和'meta_value_num'的原因。 $ today是當前日期的時間戳。這裏是我想要做的例子...拉我的頭髮 - 任何幫助將不勝感激!

工作的:

$args = array( 
    'post_type' => 'events', 
    'posts_per_page' => -1, 
    'meta_key' => 'start_date', 
    'orderby' => 'meta_value_num', 
    'order' => 'ASC', 
    'meta_query' => array(
     array(
      'key' => 'start_date', 
      'value' => $today, 
      'compare' => '>=', 
      'type' => 'NUMERIC', 
     ), 

    ) 
); 

當我在用於meta_query第二陣列添加 - 不起作用:

$args = array( 
    'post_type' => 'events', 
    'posts_per_page' => -1, 
    'meta_key' => 'start_date', 
    'orderby' => 'meta_value_num', 
    'order' => 'ASC', 
    'meta_query' => array(
     'relation' => 'AND', 
     array(
      'key' => 'start_date', 
      'value' => $today, 
      'compare' => '>=', 
      'type' => 'NUMERIC', 
     ), 
     array(
      'key' => 'end_date', 
      'value' => $today, 
      'compare' => '<=', 
      'type' => 'NUMERIC', 
     ), 

    ) 
); 

當我在主查詢使用meta_compare,並且單個meta_query - 不工作:

$args = array( 
    'post_type' => 'events', 
    'posts_per_page' => -1, 
    'meta_key' => 'start_date', 
    'meta_value_num' => $today, 
    'meta_compare' => '>=', 
    'orderby' => 'meta_value_num', 
    'order' => 'ASC', 
    'meta_query' => array(
     'relation' => 'AND', 
     array(
      'key' => 'end_date', 
      'value' => $today, 
      'compare' => '<=', 
      'type' => 'date', 
     ), 

    ) 
); 

當我在主查詢中使用meta_compare和多個meta_queries - 是否N逾時工作:

$args = array( 
    'post_type' => 'events', 
    'posts_per_page' => -1, 
    'meta_key' => 'start_date', 
    'meta_value_num' => $today, 
    'meta_compare' => '>=', 
    'orderby' => 'meta_value_num', 
    'order' => 'ASC', 
    'meta_query' => array(
     'relation' => 'AND', 
     array(
      'key' => 'start_date', 
      'value' => $today, 
      'compare' => '>=', 
      'type' => 'NUMERIC', 
     ), 
     array(
      'key' => 'end_date', 
      'value' => $today, 
      'compare' => '<=', 
      'type' => 'NUMERIC', 
     ), 

    ) 
); 

回答

0

不知道你有什麼,但似乎符合邏輯,因爲你選擇(起始> = $今天)今天,或者開始在未來的事件,不返回任何東西,今天結束或過去( END_DATE < = $今天)......

3

這裏是我落得這樣做:

$args = array( 
    'post_type' => 'events', 
    'posts_per_page' => -1, 
    'meta_key' => 'start_date', 
    'meta_value_num' => $yesterday, 
    'meta_compare' => '<=', 
    'orderby' => 'meta_value_num', 
    'order' => 'ASC', 
    'meta_query' => array(
     'relation' => 'AND', 
     array(
      'key' => 'start_date', 
      'value' => array($first_minute,$last_minute), 
      'compare' => 'BETWEEN', 
      'type' => 'NUMERIC', 
     ), 
     array(
      'key' => 'end_date', 
      'value' => $yesterday, 
      'compare' => '>=', 
      'type' => 'NUMERIC', 
     ), 
     array(
      'key' => 'start_date', 
      'value' => $yesterday, 
      'compare' => '>=', 
      'type' => 'NUMERIC', 
     ), 


    ) 
) 

這得到當月的事件。我輸入月份的最後一分鐘的每月的第一分鐘和昨天11:59:59的「昨天」。

3

這是我如何使用它,它對我來說工作得很好。

$the_query = new WP_Query(array(
    'post_type' => 'job', 
    'posts_per_page' => 25, 
    'meta_query' => array(
     array(
      'key' => 'published_date', 
      'value' => array('20140401','20140405'), 
      'compare' => 'BETWEEN', 
      'type' => 'DATE' 
     ) 
    ) 
)); 


if ($the_query->have_posts()) { 

    echo '<ul>'; 
    while ($the_query->have_posts()) { 
     $the_query->the_post(); 
     echo '<li>' . get_the_title() . '</li>'; 
    } 
    echo '</ul>'; 

} else { 
    echo 'Sorry! No Posts'; 
} 

wp_reset_postdata(); 

關於食典最重要的注意事項。

的「類型」的日期是隻之間,如果日期是存儲在格式YYYYMMDD,並用此格式測試的「比較」值。