这实际上是一个棘手的问题exact 有两种方法可以解释你的问题-
只查找标题或内容完全匹配的帖子。例如,如果您搜索My post is super 您不会返回带有标题的帖子My post is super awesome.准确的短语存在的贴子,而不仅仅是短语的一部分。例如,如果您搜索his house 您不会返回带有标题的帖子I love this house, 但你会写一篇标题为I\'m going to his house (鲁莽的例子,但希望你能抓住要点)幸运的是,您可以任意选择,但方法1要简单得多。将以下任一示例添加到functions.php 文件-
<小时>一零
add_action(\'pre_get_posts\', \'my_make_search_exact\', 10);
function my_make_search_exact($query){
if(!is_admin() && $query->is_main_query() && $query->is_search) :
$query->set(\'exact\', true);
endif;
}
Themy_make_search_exact()
函数将在每次进行查询时调用,使用pre_get_posts
行动挂钩。为了确保在不需要时不干扰查询,我们在函数中检查我们是否没有查看管理区域,是否正在构造主查询以及是否正在进行搜索。
<小时>
Method 2
add_filter(\'posts_search\', \'my_search_is_exact\', 20, 2);
function my_search_is_exact($search, $wp_query){
global $wpdb;
if(empty($search))
return $search;
$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.post_title REGEXP \'[[:<:]]{$term}[[:>:]]\') OR ($wpdb->posts.post_content REGEXP \'[[:<:]]{$term}[[:>:]]\')";
$searchand = \' AND \';
endforeach;
if(!empty($search)) :
$search = " AND ({$search}) ";
if(!is_user_logged_in())
$search .= " AND ($wpdb->posts.post_password = \'\') ";
endif;
return $search;
}
贷记至tinyGod 对于此答案-http://tinygod.pt/make-wordpress-search-exact/