首先,阅读这篇文章了解我的答案Search that will look in custom field, post title and post content
您可能希望使用acf/字段/关系/查询/但是,在添加参数时:
$args[\'meta_query\'] = array(array(
\'key\' => \'your_meta\',
\'value\' => $args[\'s\'],
\'compare\' => \'LIKE\',
));
您会发现,使用该查询,Wordpress将在标题和元字段中搜索包含您的搜索字符串的帖子。
因此,您必须添加几个过滤器才能使其正常工作:
function search_custom_meta_acf_add_join($joins) {
global $wpdb;
remove_filter(\'posts_join\',\'search_custom_meta_acf_add_join\');
return $joins . " INNER JOIN {$wpdb->postmeta} as CMS15 ON ({$wpdb->posts}.ID = CMS15.post_id)";
}
function search_custom_meta_acf_alter_search($search,$qry) {
global $wpdb;
remove_filter(\'posts_search\',\'search_custom_meta_acf_alter_search\',1,2);
$add = $wpdb->prepare("(CMS15.meta_key = \'your_field_name\' AND CAST(CMS15.meta_value AS CHAR) LIKE \'%%%s%%\')",$qry->get(\'s\'));
$pat = \'|\\(\\((.+)\\)\\)|\';
$search = preg_replace($pat,\'(($1 OR \'.$add.\'))\',$search);
return $search;
}
function modify_acf_relationship_search_query ($args, $field, $post ) {
add_filter(\'posts_join\',\'search_custom_meta_acf_add_join\');
add_filter(\'posts_search\',\'search_custom_meta_acf_alter_search\',1,2);
return $args;
}
add_filter(\'acf/fields/relationship/query/name=your_field_name\', \'modify_acf_relationship_search_query\', 10, 3);
这段代码的作用基本上是修改搜索帖子的查询,因为ACF使用wordpress内置的搜索功能在关系字段中进行搜索。您不必担心修改搜索查询的过滤器,因为它们在使用时会自行删除。
根据answer I cited above, 他没有在内部联接中使用自定义表名,但我这样做了,如果您仍然想使用$args[\'meta\\u query\']参数进行更精细的筛选,这不会造成任何问题。