排除具有特定meta_key值的帖子,保持没有该meta_key的帖子

时间:2016-06-30 作者:тнє Sufi

这个问题有解决办法,但我能找到的是,所有这些都是很久以前的事了。因此,考虑到最近的更新,我正在寻找一个解决方案(如果有)。

我有一个元密钥wpse_city, 这是一个具有多个值的单选按钮。现在我想排除带有wpse_city = \'dhaka\' 但我也想显示没有wpse_city 钥匙我就是这样做的:

$args[\'meta_query\'] = array(
    \'relation\' => \'OR\',
    array(
        \'key\' => \'wpse_city\',
        \'value\' => \'dhaka\',
        \'compare\' => \'NOT EXISTS\',
    ),
    array(
        \'key\' => \'wpse_city\',
        \'value\' => \'dhaka\',
        \'compare\' => \'!=\',
    )
);
我做得对吗?有没有其他更好的方法来实现这一点?

1 个回复
SO网友:Tim Malone

你几乎做到了——这只是一个逻辑问题。你的意思是“获取没有这个元键的帖子,或者这个元键不等于‘达卡’”。问题是,根本没有那个元键的帖子。。。也不等于“达卡”,所以他们匹配!

您可以使用一个嵌套的meta\\u查询来解决这个问题,使用AND关系来检查该键是否也存在,如果您要比较它不等于什么。像这样:

$args[\'meta_query\'] = array(
    \'relation\' => \'OR\',
    array(
        \'key\' => \'wpse_city\',
        \'compare\' => \'NOT EXISTS\',
    ),
    array(
        \'relation\' => \'AND\',
        array(
          \'key\' => \'wpse_city\',
          \'compare\' => \'EXISTS\',
        ),
        array(
          \'key\' => \'wpse_city\',
          \'value\' => \'dhaka\',
          \'compare\' => \'!=\',
        )
    )
);
当您使用EXISTS和NOT EXISTS时,您也不需要再提供值了-这是由于一个旧bug造成的。请参见WP_Meta_Query documentation 有关此的详细信息。

相关推荐

如何在wp-Query中比较不同的时间戳以获取事件自定义帖子类型?

我有一个带有自定义元数据库的自定义帖子类型(as seen on wptheming.com) 并且希望进行查询以显示即将发生的事件,例如在侧边栏中,过去的日期被忽略。但我需要一个当前时间的值来和事件开始时间进行比较。现在我从current_time(\'mysql\') 看起来是这样的:2012-02-16 13:15:31元的开始时间如下所示:201108121100如何使这两个日期具有可比性?我可以在查询中执行吗?或者是否有其他解决方案?以下是我到目前为止的查询(值留空,时间戳回显):<?ph