我现在一直在抨击一个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仍然存在。
答案 0 :(得分:0)
OR
关系看起来很好(对于那个事实,meta_query也是如此)。我会看一下比较值的语法(即你确定要对这两个值使用>=
)。通常,在使用开始日期和结束日期时,您希望查找这两个日期之间的值。你的方式将找到所有值作为startDate通常意味着在endDate之前,你想要在startDate之后的任何东西。
所以不要让startDate >= date(Ymd) <= endDate
拥有startDate || endDate >= date(Ymd)
。