Вопрос об улучшении поиска рано или поздно поднимается на каждом сайте, чего уж там, не только "вордпресса" это касается.
Но, коль скоро форум у нас о WP - есть и у него явные косяки, ради которых дополнительные плагины ставить не хотелось бы, а починить надо.
Сразу оговорюсь, предложенные сниппеты правят вывод нативного поиска, то есть, встроенного "из коробки" при установке движка Wordpress. Если Вы используйте плагины, расширяющие поиск, что-то может и не сработать. Хотя, приведенные сниппеты у меня отлично работают в связке с плагином Relevanssi. Исключения же там настраиваются отдельно, поэтому просто проверьте, нужен Вам четвёртый сниппет или нет. На этом вступлание заканчиваем, и к делу.
1. Как починить поиск кириллических символов?
Попадалась ситуация: почему-то не работает поиск в буржуйской теме, но стоит только ввести латиницу - всё нормально.
Скорее всего, кириллическая кодировка у Вас тоже в адресной строке выглядит странновато, ну, да мы про поиск сейчас.
Этот сниппет поможет уравнять шансы для всех символов:
2. Как улучшить ЧПУ страницы поиска
По умолчанию, вместо внятного адреса страницы поиска мы можем видеть нечто подобное:
вашсайт/?s=поисковыйзапрос ,но хотим видеть что-то наподобие - вашсайт/search/поисковыйзапрос
Давайте поправим адрес следующим сниппетом:
3. Как улучшить хлебные крошки для поиска без запроса?
Ещё один редирект, чисто косметический. На этот раз пользователь просто навёлся на поле поиска, но ничего в него не ввёл.
Клик - и в хлебных крошках появится что-то похожее на Результаты поиска "". Некрасиво.
Теперь в хлебных крошках при пустом запросе будет Результаты поиска без ключевого слова.
4. Как убрать страницу из вывода в результатах поиска на сайте?
Допустим, есть страница, результаты которых в поиске не нужны (карта сайта, к примеру).
Для того, чтобы она не показывалась в результатах поиска нам нужно определить её ID. Проще всего это сделать так:
находим страницу или запись в админпанели и, наведясь на Изменить (не нажимая на ссылку), читаем строку подсказки в браузере.
Будет что-то вида ваш_сайт/wp-admin/post.php?post=1329... так вот число после post= и есть наш ID.
Далее копируем сниппет в functions.php и заменяем вашим значением моё:
Всё, в поиске набор указанных страниц не выведется.
5. Как перенаправить пользователя на статью, если кроме неё в результате поиска ничего нет?
Тоже частый вариант, зачем показывать результаты поиска с одной статьёй или страницей, если понятно, что именно туда и нужно перенаправить пользователя. Ему лишний клик, нам - минус в карму, как программерам. Давайте упростим:
Скопируйте код и вставьте его в functions.php:
Но, коль скоро форум у нас о WP - есть и у него явные косяки, ради которых дополнительные плагины ставить не хотелось бы, а починить надо.
Сразу оговорюсь, предложенные сниппеты правят вывод нативного поиска, то есть, встроенного "из коробки" при установке движка Wordpress. Если Вы используйте плагины, расширяющие поиск, что-то может и не сработать. Хотя, приведенные сниппеты у меня отлично работают в связке с плагином Relevanssi. Исключения же там настраиваются отдельно, поэтому просто проверьте, нужен Вам четвёртый сниппет или нет. На этом вступлание заканчиваем, и к делу.
Для этого нам понадобится отредактировать файл functions.php, скопировав и вставив в него соответствующий кусочек кода (сниппет).По умолчанию текст вводится в поисковую форму, которая, перезагружаясь, перенаправляет посетителя на страницу со сводными результатами поиска.
И в то же время есть несколько моментов, устранив которые, мы упростим взаимодействие посетителей с материалами, тем самым улучшив конверсионные показатели сайта.
1. Как починить поиск кириллических символов?
Попадалась ситуация: почему-то не работает поиск в буржуйской теме, но стоит только ввести латиницу - всё нормально.
Скорее всего, кириллическая кодировка у Вас тоже в адресной строке выглядит странновато, ну, да мы про поиск сейчас.
Этот сниппет поможет уравнять шансы для всех символов:
/* Поиск кириллических символов */:
function my_urldecode_s($query)
{
if (is_search())
{
$query->query_vars['s'] = urldecode( $query->query_vars['s'] );
}
return $query;
}
add_filter('parse_query', 'my_urldecode_s');
2. Как улучшить ЧПУ страницы поиска
По умолчанию, вместо внятного адреса страницы поиска мы можем видеть нечто подобное:
вашсайт/?s=поисковыйзапрос ,но хотим видеть что-то наподобие - вашсайт/search/поисковыйзапрос
Давайте поправим адрес следующим сниппетом:
/* Правка ЧПУ для поиска */:
function my_rewrite_search_results_permalink()
{
global $wp_rewrite;
if ( !isset( $wp_rewrite ) || !is_object( $wp_rewrite ) || !$wp_rewrite->using_permalinks() )
return;
if ( is_search() && !is_admin() && strpos( $_SERVER['REQUEST_URI'], "/search/") === false && ! empty( $_GET['s'] ) )
{
wp_redirect( site_url() . "/search/" . urlencode( get_query_var( 's' ) ) );
exit;
}
}
add_action( 'template_redirect', 'my_rewrite_search_results_permalink' );
3. Как улучшить хлебные крошки для поиска без запроса?
Ещё один редирект, чисто косметический. На этот раз пользователь просто навёлся на поле поиска, но ничего в него не ввёл.
Клик - и в хлебных крошках появится что-то похожее на Результаты поиска "". Некрасиво.
/* Поиск без запроса */:
function empty_search_redirect( $vars )
{
if( isset( $_GET['s'] ) && empty( $_GET['s'] ) )
$vars['s'] = "без ключевого слова";
return $vars;
}
add_filter( 'request', 'empty_search_redirect' );
4. Как убрать страницу из вывода в результатах поиска на сайте?
Допустим, есть страница, результаты которых в поиске не нужны (карта сайта, к примеру).
Для того, чтобы она не показывалась в результатах поиска нам нужно определить её ID. Проще всего это сделать так:
находим страницу или запись в админпанели и, наведясь на Изменить (не нажимая на ссылку), читаем строку подсказки в браузере.
Будет что-то вида ваш_сайт/wp-admin/post.php?post=1329... так вот число после post= и есть наш ID.
Далее копируем сниппет в functions.php и заменяем вашим значением моё:
/*Исключения из поиска*/:
function my_search_filter($query)
{
if ( $query->is_search)
{
$query->set('post__not_in', array(1329) ); // id страницы или страниц через запятую (1329, 1330);
}
return $query;
}
add_filter( 'pre_get_posts', 'my_search_filter' );
5. Как перенаправить пользователя на статью, если кроме неё в результате поиска ничего нет?
Тоже частый вариант, зачем показывать результаты поиска с одной статьёй или страницей, если понятно, что именно туда и нужно перенаправить пользователя. Ему лишний клик, нам - минус в карму, как программерам. Давайте упростим:
Скопируйте код и вставьте его в functions.php:
/*Перенаправление при единичном результате поиска*/:
function redirect_search()
{
if (is_search())
{
global $wp_query;
if ($wp_query->post_count == 1)
{
wp_redirect( get_permalink( $wp_query->posts['0']->ID ) );
}
}
}
add_action('template_redirect', 'redirect_search');
Последнее редактирование: