我用不同的<select>
和<input>
.
我使用meta_query
并构建一个键/值对数组。
Array
(
[relation] => AND
[0] => Array
(
[relation] => AND
[0] => Array
(
[fields] => ID
[key] => ville
[value] => Angers
[compare] => LIKE
[type] => CHAR
)
)
[1] => Array
(
[relation] => OR
)
[2] => Array
(
[relation] => OR
)
)
它可以工作,我可以过滤用户或帖子(我使用
WP_User_Query
或
WP_Query
).
搜索表单使用AJAX,这意味着每次用户更改select
, 这个$query_array
更新,结果列表也会更新。
因此,假设select的默认值为0
<option selected="" value="0"> -- City -- </option>
在这种情况下,我重置了meta\\u键/meta\\u值:
if (!empty($_POST[\'city\']) && $_POST[\'city\'] != \'0\') {
$meta_value_ville = $_POST[\'city\'];
array_push($query_array_and, array(\'fields\' => \'ID\', \'key\' => \'ville\', \'value\' => $meta_value_ville, \'compare\' => \'LIKE\', \'type\' => \'CHAR\'));
} else if ($_POST[\'city\'] === \'0\') {
// reset
array_push($query_array_and, array(\'fields\' => \'ID\', \'key\' => \'\', \'value\' => \'\', \'compare\' => \'LIKE\', \'type\' => \'CHAR\'));
}
我清空键和值。
结果是
Array
(
[relation] => AND
[0] => Array
(
[relation] => AND
[0] => Array
(
[fields] => ID
[key] =>
[value] =>
[compare] => LIKE
[type] => CHAR
)
)
[1] => Array
(
[relation] => OR
)
[2] => Array
(
[relation] => OR
)
)
这是最好的方法吗?我觉得有些时候,使用这种方法,帖子或用户的列表并不完整。
SO网友:Barry Kooij
我不会像那样推送元查询条目,而是构建更符合逻辑的元查询条目。
例如:
$meta_query_args = array( \'relation\' => \'AND\' ); // assuming you want \'AND\' search, you\'re using both in your example
if ( ! empty( $_POST[\'city\'] ) && $_POST[\'city\'] != \'0\' ) {
$meta_value_ville = $_POST[\'city\'];
$meta_query_args[\'city_clause\'] = array(
\'key\' => \'ville\',
\'value\' => $meta_value_ville,
\'compare\' => \'LIKE\',
\'type\' => \'CHAR\'
);
}
// Example, say you also have a country field
if ( ! empty( $_POST[\'country\'] ) && $_POST[\'country\'] != \'0\' ) {
$meta_value = $_POST[\'country\'];
$meta_query_args[\'country_clause\'] = array(
\'key\' => \'country\',
\'value\' => $meta_value,
\'compare\' => \'LIKE\',
\'type\' => \'CHAR\'
);
}
注1:我不再将日期推到现有阵列中,每次都从头开始构建。这将为您保存重置某些元查询数组的所有代码。
注2:我删除了\'fields\' => \'ID\'
部分,因为这不是meta\\u查询的一部分。您应该将此添加到WP_Query
.
注3:因为我给出了命名索引(例如。city_clause
) 你可以在剩下的时间里使用它们WP_Query
. 示例:现在可以按如下方式对其排序:
$q = new WP_Query( array(
\'meta_query\' => $meta_query_args,
\'orderby\' => \'city_clause\'
) );