2013-07-15 63 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,并用此格式测试的“比较”值。