META_QUERY仅检查是否同时设置了两个值

时间:2017-07-22 作者:user1280853

我有一个年龄过滤器,它检查两个自定义字段,min_agemax_age, max_age 是可选的,因此可以为空。

这些似乎不在一起工作:

    array(
      \'key\'     => \'max_age\',
      \'value\'   => $max_age,
      \'type\' => \'numeric\',
      \'compare\' => \'<=\',
    ),
    array(
      \'key\'     => \'max_age\',
      \'value\'   => \'\',
      \'compare\' => \'!=\',
    )
如果删除顶部数组(<;=过滤器),它将返回正确的结果,仅显示具有正确的最小年龄的结果和具有最大年龄值的结果。我怎样才能让他们一起工作,因为!= \'\' max_age 需要过滤器,否则max_age <;=筛选器无法正常工作,因为如果max\\u age自定义字段为空,它会忽略该筛选器。

      $query->set( \'meta_query\', array(
        \'relation\' => \'AND\',
        array(
          \'key\'     => \'min_age\',
          \'value\'   => $min_age,
          \'type\' => \'numeric\',
          \'compare\' => \'>=\',
        ),
        array(
          \'key\'     => \'max_age\',
          \'value\'   => $max_age,
          \'type\' => \'numeric\',
          \'compare\' => \'<=\',
        ),
        array(
          \'key\'     => \'max_age\',
          \'value\'   => \'\',
          \'compare\' => \'!=\',
        )
      ));

1 个回复
SO网友:Johansson

您可以使用isset 检查值是否已设置,然后将其作为参数传递。将查询分为两部分,并根据需要使用它们。

// Check if both are set 
if ( isset( $max_age ) && isset( $min_age ) ) {
    $meta_query = array(
        \'relation\' => \'AND\',
        array(
          \'key\'     => \'min_age\',
          \'value\'   => $min_age,
          \'type\' => \'numeric\',
          \'compare\' => \'>=\',
        ),
        array(
          \'key\'     => \'max_age\',
          \'value\'   => $max_age,
          \'type\' => \'numeric\',
          \'compare\' => \'<=\',
        ),
        array(
          \'key\'     => \'max_age\',
          \'value\'   => \'\',
          \'compare\' => \'!=\',
        )
    );
} else {
    $meta_query = array(
        array(
          \'key\'     => \'min_age\',
          \'value\'   => $min_age,
          \'type\' => \'numeric\',
          \'compare\' => \'>=\',
        )
    );
}
// Now set the query
$query->set( \'meta_query\', $meta_query );
如果两者都是$min_age$max_age 始终设置,如果要检查它们是否为空,可以使用empty() 而不是isset().

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post