WP_Query - 关系为'OR'的Meta_Query不起作用

时间:2014-03-05 17:05:03

标签: wordpress

我现在一直在抨击一个bug几个小时,似乎无法找到我的错误。 Wordpress中的关系类型“OR”可能存在错误吗?

$evenements = new WP_Query(array(
    'post_type'     => 'evenements',
    'orderby'       => 'meta_value',
    'meta_key'      => 'startDate',
    'order'         => 'ASC',
    'meta_query'    => array(
        'relation'  => 'OR',
        array(
            'key'       => 'startDate',
            'value'     => date('Ymd'),
            'compare'   => '>=',
        ),
        array(
            'key'       => 'endDate',
            'value'     => date('Ymd'),
            'compare'   => '>=',
        ),
    ),
));

奇怪的是,如果我将关系置于'AND',它就会按预期工作。如果两个陈述都为真,则会显示帖子。如果我将关系设置为“或”,则所有帖子都会显示,并且由于某种原因,即使订单也无法正常运行。即使将“订单”从“ASC”更改为“DESC”也不会改变结果的顺序。

要理解查询,这里是我正在尝试做的详细信息:

我想展示正在进行或将来发生的事件。两个metas是事件开始的日期(startDate)和事件结束的日期(endDate)。

因此,如果开始日期更高或相等(如果事件发生在今天)到今天或结束日期高于或等于今天,请显示帖子。

第二部分(结束日期)将被显示,因此将显示正在进行的事件,并且我无法删除第一部分(具有开始日期),因为如果事件仅持续一天,则客户端将仅输入startDate meta。

我放弃了来自插件的bug,因为我禁用了所有插件,而且bug仍然存在。

1 个答案:

答案 0 :(得分:0)

OR关系看起来很好(对于那个事实,meta_query也是如此)。我会看一下比较值的语法(即你确定要对这两个值使用>=)。通常,在使用开始日期和结束日期时,您希望查找这两个日期之间的值。你的方式将找到所有值作为startDate通常意味着在endDate之前,你想要在startDate之后的任何东西。

所以不要让startDate >= date(Ymd) <= endDate拥有startDate || endDate >= date(Ymd)