Мой основной проект: Боевые искусства в кинематографе! (fight-films.info)

Свеженькое
Реакция публики
Облако пометок
css Google html SEO WordPress Яндекс видео графический дизайн заработок индексация интернет ключевые слова контент партнерка поисковые системы посещаемость продвижение раскрутка реклама сайт статья хостинг

Подсветка слов в поиске WordPress

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

Все лечится, при чем для этого не нужны огромные плагины и даже плясать с бубном не придется никому.

Сначала для тех, кто боится слова "код" или не желает заморачиваться по таким мелочам, для визуально понятного поиска на сайте существует плагин Search Everything. Он не только визуально подсвечивает слова, но еще ищет везде (чего нет во встроенном поиске) : посты, категории, комментарии, метки и так далее... ну и конечно же он замедляет скорость работы и без того медленного сайта.

Я считаю что поиск в комментариях и прочих неосновных информационных источниках являет излишним удовольствием. Пользователь в первую очередь обращает внимание на записи, в которых автор пытается рассмотреть какую-либо проблему максимально подробно. К примеру, возьмем топик "Улучшаем поиск на сайте" и комментарий: "Аффтар, у тебя клевый поиск" , в какой информации пользователь нуждается более при поисковом запросе: "Улучшить поиск" ? Короче, мысль понятна.

Так вот. Задача: показать пользователю что он находится на странице поиска и видит искомые слова. То есть, нам нужно просто подсвечивать слова и вставлять соответствующий заголовок.

WordPress для поиска использует шаблон search.php, если его нет, то это будет index.php. Следовательно, для того, чтоб вкрутить нужные функции в результаты поиска необходимо иметь файл search.php. Если его нет, создадим.

Создаем и правим шаблон search.php

Как и в большинстве случаев, нам как заготовка подойдет вышеупомянутый файл index.php, копируем его и сохраняем как search.php. И уже при следующем использовании поиска на сайте будет подключаться именно этот файл.

Сначала сделаем заголовок. Для этого вклеим подобную строку где-нидь чтоб пользователь понимал где он находится:

Результаты поиска для  <?php $allsearch = &new WP_Query("s=$s&showposts=-1"); $key = wp_specialchars($s, 1); $count = $allsearch->post_count; ?><?php echo "\"".$key."\""; ?>

Далее, находим в шаблоне строчку:

<?php the_title(); ?>

И заменяем ее на этот код:

<?php
  $title = get_the_title();
  $keys = explode(" ",$s);
  $title = preg_replace('/('.implode('|', $keys) .')/iu', '<strong class="search-excerpt">\0</strong>', $title);
  echo $title;
?>

Таким образом мы уже определили что искомое слово будет выделяться в заголовках жирным шрифтом +обработка в css. Сделаем то же и с текстом анонсов. Находим дальше в коде это:

<?php the_excerpt(); ?>

И заменяем его на следующий код:

<?php
  $excerpt = get_the_excerpt();
  $keys = explode(" ",$s);
  $excerpt = preg_replace('/('.implode('|', $keys) .')/iu', '<strong class="search-excerpt">\0</strong>', $excerpt);
  echo $excerpt;
?>

Если у вас вместо анонса (get_the_excerpt) отображается обрезок содержимого (the_content), то замените это:

<?php the_content(); ?>

На тот же представленный выше код. Искомое слово выделяется жирным шрифтом как в заголовках, так и в анонсах, и ему присваивается класс "search-excerpt". Давайте к этому классу прикрутим стиль. Например, желтый фон и черный цвет. Вставляем следующее в наш style.css:

.search-excerpt {background:#ff9;color:#000;}

Все, у нас поиск стал более человекопонятным. :)

Решение позаимствовано у Dimox'a, спасибо ему за это.

комментария 2
  1. Gilbert:

    Отлично! Спасибо огромное!
    согласен с вами на счет излишней нагрузки на сервер!
    надо беднягу беречь, а то так и посетителей можно лишиться из-за долгой загрузки!

  2. Алексей:

    Спасибо за статью. Один вопрос только, как заставить работать код

    <?php
    $excerpt = get_the_excerpt();
    $keys = explode(» «,$s);
    $excerpt = preg_replace(‘/(‘.implode(‘|’, $keys) .’)/iu’, ‘’, $excerpt);
    echo $excerpt;
    ?>

    используя <?php the_content(»); ?>