我有一个自定义帖子类型'events',其中包含start_date和end_date的自定义字段。我正在尝试制作即将发生的事件的简单列表。如果我只查询带有start_date> =今天的事件,它可以正常工作。如果我添加一个meta_query来说“AND”所有带有end_date< = today的事件 - 它不会返回任何内容。
我的自定义字段(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时 - 不工作:
$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 :(得分:5)
这就是我使用它的方式,它对我来说很好。
$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格式存储并使用此格式进行测试时,'type'DATE才会使用'compare'值BETWEEN。
答案 1 :(得分: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的“昨天”的变量。
答案 2 :(得分:0)
不确定你在尝试什么但似乎没有任何回报,因为你选择今天或将来开始的事件(start_date&gt; = $ today)并且今天或过去结束(end_date&lt; = $ today) )...
答案 3 :(得分:0)
Alexandru-Florentin Popescu是对的!使用您的代码另一个以下:
$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',
),
));
您只需要在两个数组中使用更改键“比较”即可