我知道以前有人问过这个问题,但这个功能似乎是在v4中添加的。1和被接受的答案没有帮助(它们是4.1之前的)。
如何将元查询与and和ORs“链接”?我找到了这个Update on Query improvements in 4.1 但我似乎无法获得适用于我的应用程序的正确语法。
我想在哪里查询帖子flagged
不是1
AND
(expiry_date
是在未来OR
空白)
我尝试过对数组和“关系”重新排序,但没有效果(数据库中肯定有与此查询匹配的帖子)。
查询的日期部分工作正常,但添加flagged
查询不返回帖子。
\'meta_query\' => array(
\'relation\' => \'AND\',
array(
\'key\' => \'flagged\',
\'value\' => \'1\',
\'compare\' => \'!=\'
),
array(
\'relation\' => \'OR\',
array(
\'key\' => \'expiry_date\',
\'value\' => date(\'Y-m-d\',strtotime("today")),
\'compare\' => \'>=\',
\'type\' => \'DATETIME\',
),
array( //has no date
\'key\' => \'expiry_date\',
\'value\' => \'\',
\'compare\' => \'=\'
)
)
)
最合适的回答,由SO网友:mistertaylor 整理而成
执行AND或的正确语法如下:
\'meta_query\' => array(
\'relation\' => \'AND\',
array(
\'key\' => \'flagged\',
\'value\' => \'1\',
\'compare\' => \'!=\'
),
array(
\'relation\' => \'OR\',
array(
\'key\' => \'expiry_date\',
\'value\' => date(\'Y-m-d\',strtotime("today")),
\'compare\' => \'>=\',
\'type\' => \'DATETIME\',
),
array( //has no date
\'key\' => \'expiry_date\',
\'value\' => \'\',
\'compare\' => \'=\'
)
)
)
作为旁注,似乎设置为
NULL
(例如
flagged
) 此查询不会返回。设置为任何其他值(例如
0
) 解决此问题。