Настройка поиска 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 в нем никакого урл нету 🙁