我正在努力让wordpress在一个自定义字段中搜索,而不使用其他帖子文本或属性。该网站有一个非常特殊的功能,即在自定义字段中返回与英国邮政编码的第一个字母完全匹配的帖子。无需其他搜索。
因此,每个帖子代表一家工程公司,该公司有许多英国邮政编码。当站点用户搜索特定的邮政编码时,应返回存在该编码的所有帖子。
我正在使用高级自定义字段插件
我在我的子主题函数中尝试了这段代码。php
function __search_by_postcode_only( $search, &$wp_query )
{
global $wpdb;
if ( empty( $search ) )
return $search; // skip processing - no search term in query
$q = $wp_query->query_vars;
$n = ! empty( $q[\'exact\'] ) ? \'\' : \'%\';
$search =
$searchand = \'\';
foreach ( (array) $q[\'search_terms\'] as $term ) {
$term = esc_sql( like_escape( $term ) );
$search .= "{$searchand}($wpdb->posts.search_post_code LIKE \'{$n} {$term}{$n}\')";
$searchand = \' AND \';
}
if ( ! empty( $search ) ) {
$search = " AND ({$search}) ";
if ( ! is_user_logged_in() )
$search .= " AND ($wpdb->posts.post_password = \'\') ";
}
return $search;
}
add_filter( \'posts_search\', \'__search_by_postcode_only\', 500, 2 );
其中,search\\u post\\u code是相关的自定义字段,可以有多个值。
我尝试过其他增强的搜索插件,但它们似乎都能搜索帖子标题和帖子内容。
感谢您的帮助。
谢谢
SO网友:Michael Cropper
在WordPress上,您可以在访问URL时过滤搜索,例如,在末尾添加一个附加参数;
https://www.your-website.com/?s=search-query&post_type=custom_post_type_name
如果您是从网站上的搜索框/表单访问此URL,请添加以下隐藏字段;
<input type="hidden" name="post_type" value="post type name" />