• ДОБРО ПОЖАЛОВАТЬ В КЛУБ ПО WORDPRESS

    Мы активно растущий клуб по WordPress и нам нужна помощь каждого человека, в том числе и Ваша! Не стесняйтесь и станьте частью большого сообщества.
    Мы делимся новостями, отытом и полезными советами! Пройдите простую регистрацию, чтобы пользоваться всеми возможностями нашего клуба.

    Присоединяйтесь к нам, вам обязательно понравится - Присоединится

5 способов улучшить поиск на WordPress-е не используя плагины

Вопрос об улучшении поиска рано или поздно поднимается на каждом сайте, чего уж там, не только "вордпресса" это касается.
Но, коль скоро форум у нас о 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');
 
Последнее редактирование:

Комментарии

Последние ресурсы

Топ поддержки


Сверху