META_QUERY中的嵌套数组问题

时间:2016-03-13 作者:Janith Chinthana

我正在使用以下meta\\u查询根据以下搜索条件搜索博客帖子,

搜索逻辑:

如果设置了过期日期,请检查帖子的过期日期,否则只需将其包括在国家/地区($_country) 在筛选器中,搜索具有上述过期日期规则的特定国家/地区。否则,只需应用过期日期规则即可元查询:

$expire_meta_1 = array(
    \'key\' => \'_simple_fields_fieldGroupID_3_fieldID_7_numInSet_0\',
    \'value\' => \'\',
    \'compare\' => \'NOT EXISTS\'
);

$expire_meta_2 = array(
    \'key\' => \'_simple_fields_fieldGroupID_3_fieldID_7_numInSet_0\',
    \'value\' => date("Y-m-d"),
    \'compare\' => \'>=\',
    \'type\' => \'DATE\'
);

if($_country!=\'\'){
    $country_meta = array(
        \'key\' => \'_simple_fields_fieldGroupID_3_fieldID_8_numInSet_0\',
        \'value\' => $_country,
        \'compare\' => \'=\'
    );
    $args[\'meta_query\'] = array( \'relation\' => \'AND\', array( \'relation\' => \'OR\', $expire_meta_1, $expire_meta_2), $country_meta);
} else{
    $args[\'meta_query\'] = array( \'relation\' => \'OR\', $expire_meta_1, $expire_meta_2);
}
问题是,如果是国家搜索,post应该设置过期日期。但我需要选择的帖子也没有设置过期日期。(如果设置了check the expire,则无论如何都可以)。

但是,如果我没有搜索特定的国家,过期日期规则(规则1)工作正常。

谁都知道我犯了什么错。任何帮助都将不胜感激。我希望问题是明确的,否则我可以提供更多的细节,请让我知道。提前谢谢。

1 个回复
最合适的回答,由SO网友:Janith Chinthana 整理而成

经过几个小时的调试,我终于发现了真正的问题。

我正在使用simple fields 要保存expire datecountry 价值观所以在simple field 即使我们没有设置任何内容,它仍然是在数据库中保存空字符串。因此,当我检查不存在的字段时,它不会给出正确的结果,但是当我搜索空字符串(如下所示)时,它会给出正确的输出。

$expire_meta_1 = array(
    \'key\' => \'_simple_fields_fieldGroupID_3_fieldID_7_numInSet_0\',
    \'value\' => \'\',
    \'compare\' => \'=\'
);
我应该感谢@Sumit帮助我找出真正的问题。

相关推荐

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

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