我正在尝试使用ACF关系字段分配相关帖子。它具有提前键入搜索功能,可以按邮件标题进行搜索。
我想将meta\\u数据搜索添加到ACF关系搜索中。
This question 我的查询工作正常,但搜索字段仍然显示没有结果。
我认为typeahead正在删除结果,因为typeahead只与标题匹配。
有没有办法编辑它以允许元数据在搜索结果中返回?
我正在尝试使用ACF关系字段分配相关帖子。它具有提前键入搜索功能,可以按邮件标题进行搜索。
我想将meta\\u数据搜索添加到ACF关系搜索中。
This question 我的查询工作正常,但搜索字段仍然显示没有结果。
我认为typeahead正在删除结果,因为typeahead只与标题匹配。
有没有办法编辑它以允许元数据在搜索结果中返回?
首先,阅读这篇文章了解我的答案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\']参数进行更精细的筛选,这不会造成任何问题。
我不熟悉PHP和WordPress,我很好奇:为什么WP查询是大写的?这是基于查询类型的PHP命名约定吗?还是怎样谢谢
我正在尝试使用ACF关系字段分配相关帖子。它具有提前键入搜索功能,可以按邮件标题进行搜索。
我想将meta\\u数据搜索添加到ACF关系搜索中。
This question 我的查询工作正常,但搜索字段仍然显示没有结果。
我认为typeahead正在删除结果,因为typeahead只与标题匹配。
有没有办法编辑它以允许元数据在搜索结果中返回?
首先,阅读这篇文章了解我的答案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\']参数进行更精细的筛选,这不会造成任何问题。
我有一个带有自定义元数据库的自定义帖子类型(as seen on wptheming.com) 并且希望进行查询以显示即将发生的事件,例如在侧边栏中,过去的日期被忽略。但我需要一个当前时间的值来和事件开始时间进行比较。现在我从current_time(\'mysql\') 看起来是这样的:2012-02-16 13:15:31元的开始时间如下所示:201108121100如何使这两个日期具有可比性?我可以在查询中执行吗?或者是否有其他解决方案?以下是我到目前为止的查询(值留空,时间戳回显):<?ph