ACF关系字段搜索筛选

时间:2015-02-18 作者:Bryan

我正在尝试使用ACF关系字段分配相关帖子。它具有提前键入搜索功能,可以按邮件标题进行搜索。

我想将meta\\u数据搜索添加到ACF关系搜索中。

enter image description here

This question 我的查询工作正常,但搜索字段仍然显示没有结果。

enter image description here

我认为typeahead正在删除结果,因为typeahead只与标题匹配。

有没有办法编辑它以允许元数据在搜索结果中返回?

1 个回复
SO网友:javiertoledos

首先,阅读这篇文章了解我的答案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\']参数进行更精细的筛选,这不会造成任何问题。

结束
ACF关系字段搜索筛选 - 小码农CODE - 行之有效找到问题解决它

ACF关系字段搜索筛选

时间:2015-02-18 作者:Bryan

我正在尝试使用ACF关系字段分配相关帖子。它具有提前键入搜索功能,可以按邮件标题进行搜索。

我想将meta\\u数据搜索添加到ACF关系搜索中。

enter image description here

This question 我的查询工作正常,但搜索字段仍然显示没有结果。

enter image description here

我认为typeahead正在删除结果,因为typeahead只与标题匹配。

有没有办法编辑它以允许元数据在搜索结果中返回?

1 个回复
SO网友:javiertoledos

首先,阅读这篇文章了解我的答案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\']参数进行更精细的筛选,这不会造成任何问题。

相关推荐

如何在wp-Query中比较不同的时间戳以获取事件自定义帖子类型?

我有一个带有自定义元数据库的自定义帖子类型(as seen on wptheming.com) 并且希望进行查询以显示即将发生的事件,例如在侧边栏中,过去的日期被忽略。但我需要一个当前时间的值来和事件开始时间进行比较。现在我从current_time(\'mysql\') 看起来是这样的:2012-02-16 13:15:31元的开始时间如下所示:201108121100如何使这两个日期具有可比性?我可以在查询中执行吗?或者是否有其他解决方案?以下是我到目前为止的查询(值留空,时间戳回显):<?ph