我正在使用多个 ACF 字段构建自定义搜索。 我需要搜索搜索输入和所有 ACF 字段中的所有单词,因此我编写了这样的查询:
$keywords = explode(' ', $_POST['search_value']);
$searchable_fields = array('acf_name', 'acf_surname', 'street');
$meta_query = array();
foreach ($keywords as $keyword) {
foreach ($searchable_fields as $searchable_field) {
$meta_query[] = array(
'key' => $searchable_field,
'value' => $keyword,
'compare' => 'LIKE',
);
}
}
$meta_query = array(
'relation' => 'OR',
$meta_query
);
$args = array(
'post_type' => "custom_post_type",
'posts_per_page' => -1,
'meta_query' => $meta_query
);
但是这段代码不起作用。 例如,如果搜索:“Wilhelm SCHROFF”和 print_r for $args,我有:
[meta_query] => Array
(
[relation] => OR
[0] => Array
(
[0] => Array
(
[key] => stolpersteine_name
[value] => Wilhelm
[compare] => LIKE
)
[1] => Array
(
[key] => stolpersteine_surname
[value] => Wilhelm
[compare] => LIKE
)
[2] => Array
(
[key] => street
[value] => Wilhelm
[compare] => LIKE
)
[3] => Array
(
[key] => stolpersteine_name
[value] => SCHROFF
[compare] => LIKE
)
[4] => Array
(
[key] => stolpersteine_surname
[value] => SCHROFF
[compare] => LIKE
)
ecc, ecc
)
)
我认为问题出在 $meta_query 数组中。 我该如何解决这个问题? 谢谢
将
'relation' => 'OR'
添加到 $meta_query
时出现问题。你这样做的方式$meta_query
落在了一个额外的数组中。试试这个:
$keywords = explode(' ', $_POST['search_value']);
$searchable_fields = array('acf_name', 'acf_surname', 'street');
$meta_query = array('relation' => 'OR');
foreach ($keywords as $keyword) {
foreach ($searchable_fields as $searchable_field) {
$meta_query[] = array(
'key' => $searchable_field,
'value' => $keyword,
'compare' => 'LIKE',
);
}
}
$args = array(
'post_type' => "custom_post_type",
'posts_per_page' => -1,
'meta_query' => $meta_query
);