Настройка поиска WordPress. Как убрать из результатов частичное совпадение?
Как сделать на wordpress, чтобы в результатах поиска показывалось только полное совпадение?
Посоветуйте любое решение, с помощью плагина, или изменения кода.
Добавьте в урл поиска параметр &sentence=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;
}
или
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('sentence', true);
endif;
}
Спасибо, но не работает, когда добавляю первый кусок кода в functions.php – вообще перестает искать,
а если второй – то ищет по старому, не строгое соответствие, а все, например по слову “иван” – выдает всех “ивановичей, иванкиных, и т.п.
Нашел еще такой вариант, чтобы сделать поиск на WordPress более точным. Добавить код в functions.php
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;
}
Тест показывает, что результаты поиска отличаются от тех, что делать без кода.
Извините, не совсем поняла в какой урл? у меня есть search.php в нем никакого урл нету 🙁