我对此做了更多的测试,老实说,我找不到它不起作用的原因(除非上面的代码只是一个片段,真正的代码适合我下面的示例)。然而,我确实发现了一些可能会引导你走向正确方向的事情。
1) 就其本身而言,此元查询相当于“colors is NULL”,即它将返回Posteta表中未设置该键的帖子。这就是上面所示的情况,它应该是有效的。
\'meta_query\' => array(
array(
\'key\' => \'colors\',
\'compare\' => \'NOT EXISTS\' // this should work...
),
)
2)在WordPress 3.9之前,将“关系”索引建立为“或”会更改此条件。它返回相反的结果。别问我为什么。这在执行多个元查询时尤其重要。这意味着最初不可能对“colors”键设置为“blue”(或其他)或根本没有设置的帖子进行查询。下面的查询将忽略第一个条件,只返回与第二个条件匹配的条件。
\'meta_query\' => array(
\'relation\' => \'OR\',
array(
\'key\' => \'colors\',
\'compare\' => \'NOT EXISTS\' // doesn\'t work
),
array(
\'key\' => \'colors\',
\'value\' => \'blue\'
)
)
3)然而,如果我们设置“值”,我们可以欺骗WordPress使用第一个条件。它不需要相关的值(据我所知,它被忽略了),但它
needs to be set 为了
NOT EXISTS
条件产生任何影响。
\'meta_query\' => array(
\'relation\' => \'OR\',
array(
\'key\' => \'colors\',
\'compare\' => \'NOT EXISTS\', // works!
\'value\' => \'\' // This is ignored, but is necessary...
),
array(
\'key\' => \'colors\',
\'value\' => \'blue\'
)
)
这在WordPress 3.9之前都是正确的。如果您仍在使用旧版本,这是一个可行的解决方法。