如何过滤集或“或”结果以及最终的“与”,并且可以与“或”中的“不存在”一起安全使用

时间:2019-08-31 12:53:00

标签: wordpress advanced-custom-fields

我正在尝试获取针对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,
            ]);

我应该获取没有较早日期的行,但这会返回当前所有行。

1 个答案:

答案 0 :(得分: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,
        ]);