我有一个年龄过滤器,它检查两个自定义字段,min_age
和max_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\' => \'!=\',
)
));
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()
.