我正在开发一个“复选框过滤器”,通过选中值查询帖子。看见this link (编辑:正如您所看到的,此链接中只有2篇帖子,用户检查“MINI”后会得到一个很好的结果,用户检查“MINI”和“COMPACT”后不会给出结果,而不是2篇帖子)。现在,如果用户只检查1个值,它就会工作。一旦用户检查了多个,则不会给出任何结果。我正在使用以下元查询代码(这是较长代码的一部分,这就是为什么会有if语句):
if (gap_meta_values($key, $value)) {
$args[\'meta_query\'][] = array(
\'key\' => $key,
\'value\' => $value,
\'compare\' => \'LIKE\'
);
因此,如果只有1个元值,这是可行的。但是,如果有多个值,则不起作用。所以我尝试了几种方法来让它工作,我认为这是因为键和值之间没有关系。所以我尝试了这个:
if (gap_meta_values($key, $value)) {
$args[\'meta_query\'][] = array(
\'relation\' => \'OR\',
array (
\'key\' => $key,
\'value\' => $value,
\'compare\' => \'LIKE\'
)
);
}
但这两者似乎都不起作用。如何做到这一点,使其能够从选中的值中查询所有帖子?感谢您的回复。
SO网友:s_ha_dum
You code is generating a broken meta_query
. 您的代码将生成如下内容:
array(1) {
["meta_query"]=>
array(2) {
[0]=>
array(2) {
["relation"]=>
string(2) "OR"
[0]=>
array(3) {
["key"]=>
string(4) "test"
["value"]=>
string(10) "test_value"
["compare"]=>
string(4) "LIKE"
}
}
}
应该是这样的:
array(1) {
["meta_query"]=>
array(2) {
["relation"]=>
string(2) "OR"
[0]=>
array(3) {
["key"]=>
string(4) "test"
["value"]=>
string(10) "test_value"
["compare"]=>
string(4) "LIKE"
}
}
}
问题是后面的方括号:
$args[\'meta_query\'][]
这是不正确的。要组合您的价值观,请执行以下操作:
$meta_q = array();
$key =\'test\';
$value=\'test_value\';
if (!empty($key) && !empty($value)) {
$meta_q[] = array(
\'key\' => $key,
\'value\' => $value,
\'compare\' => \'LIKE\'
);
}
$key2 =\'test\';
$value2=\'test_value\';
if (!empty($key2) && !empty($value2)) {
$meta_q[] = array(
\'key\' => $key2,
\'value\' => $value2,
\'compare\' => \'LIKE\'
);
}
$args = array(
\'relation\' => \'OR\',
\'meta_query\' => $meta_q,
);
var_dump($args);