WP_Query meta_query date range with 2 custom fields
我有一个自定义帖子类型"事件",其中包含start_date和end_date的自定义字段。 我正在尝试列出即将发生的事件。 如果我仅查询具有start_date> =今天的事件,则可以正常工作。 如果我添加meta_query来说" AND"所有具有end_date <=今天的事件-它不会返回任何内容。
我的自定义字段(start_date,end_date)存储为unix时间戳,这就是为什么我使用" NUMERIC"和" meta_value_num"的原因。 $ today是当前日期的时间戳。 以下是我正在尝试做的事的示例...拔出头发-任何帮助将不胜感激!
这项工作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $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添加第二个数组时-不起作用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | $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时-不起作用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $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时-不起作用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | $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', ), ) ); |
这就是我使用它的方式,它对我来说很好用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | $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(); |
食典上最重要的说明。
The 'type' DATE works with the 'compare' value BETWEEN only if the date is stored at the format YYYYMMDD and tested with this format.
我最终要做的是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | $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的"昨天"的变量。
Alexandru-Florentin Popescu是对的! 使用您的代码另一个以下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | $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', ), )); |
您只需要两个数组中的更改键"比较"
不确定您要尝试什么,但是在选择今天或将来开始的事件(start_date> = $ today)并结束今天或过去的事件(end_date <= $ today)时似乎不返回任何逻辑...