如何使用与'OR'中的'NOT EXIST'安全配合的最终'AND'筛选一组或'OR'结果



我正在尝试获取为WordPress查询返回的数据集,但我无法获得使用ACF字段的最后一部分。

"OR"部分工作正常,它返回包含存在或不存在字段的两行的集合。

问题是我似乎无法过滤掉比今天日期早的旧 ACF 字段。

ACF 字段(时间(采用 d-m-Y 格式。

所以基本上,我希望集合返回来自并包括今天在内的任何行 - 以及没有填充 ACF 的行。

我已经设法使查询的第一部分正常工作,因此将其留在那里作为上下文。我已经尝试了各种格式的关系/数组,但要么得到空白结果,要么得到所有行。


$newDate = date('d-m-Y');
$the_query = new WP_Query([
'meta_query' => array(
'relation' => 'OR',
array('key' => 'time', 'compare' => 'NOT EXISTS'),
array('key' => 'time', 'compare' => 'EXISTS'),
),
array( 'relation' => 'AND',
array('key' => 'time', 'value' => $newDate, 'compare' => '>'),
),
'order' => 'DESC',
'cat' => $final_cat,
'orderby' => 'meta_value',
'posts_per_page' => -1,
]);

我应该得到没有旧日期的行,但这会返回目前的所有行。

经过更多的挖掘,我发现ACF实际上将日期选择器字段存储在Ymd中,无论您选择什么。通过一些调整,我能够返回所有没有日期字段的字段,以及将来的日期。


$the_query = new WP_Query([
'meta_query' => array(
'relation' => 'OR',
array('key' => 'time', 'compare' => 'NOT EXISTS'), 
array('key' => 'time', 'value' => date('Ymd'), 'type' => 'DATE', 'compare' => '>='),
),
'order' => 'DESC',
'tag' => $sk_tag,
'orderby' => 'meta_value',
'posts_per_page' => -1,
]);

最新更新