Улучшаем поиск в WordPress

Сайтостроение WordSmall

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

Список улучшений, которые мы добавим:

  • Подсчет результатов поиска.
  • Подсветка совпадений слов поискового запроса.
  • Исключение определенных категорий из поиска.
  • Улучшение страницы «не найденных результатов».

Со списком мы познакомились, а теперь займемся установкой всех дополнений.

Подсчет результатов поиска.

Нужно открыть файл search.php, он находится внутри вашей темы. Нас интересует стандартная фраза поиска, примерно такая:

<h2>Результат поиска</h2>

Заменяем ее на код ниже, и в случае, если такой фразы не найдете в файле, то просто вставляете также этот код:

<h2 class="searpage">По Вашему запросу "<?php
$allsearch = new WP_Query("s=$s&showposts=-1");
$key = wp_specialchars($s, 1);
$count = $allsearch->post_count; _e('');
_e('<span class="search-terms">');
echo $key; _e('</span>"'); _e(' &mdash; ');
if ($count == 1):
echo $count . ' '; _e('результат');
else:
 if ($count > 4):
  echo $count . ' '; _e('результатов');
 else:
  echo $count . ' '; _e('результата');
 endif;
endif;
wp_reset_query(); ?></h2>

Проверяем что получилось, все работать должно без ошибок. Теперь информация по окончанию поиска будет такая:

По Вашему запросу «статья» — 5 результатов

Последнее что осталось, это добавить стили.

span.search-terms {
        color:#cc0000;
}
h2.searpage{
        font:bold 14px arial;
        margin-left:30px;
        color:#383838;
        font-style:italic;
}

Вот и все, идем дальше.

Подсветка совпадений слов поискового запроса.

Тут могут появиться затруднения, поскольку не во всех темах может совпадать выводы записей, но приблизительно можно найти нужный код. Снова открываем файл search.php и ищем следующий отрывок кода:

<?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;
?>

Дальше ищем один из двух вариантов кода, такой:

<?php the_excerpt(); ?>

Или такой:

<?php the_content(); ?>

И меняем на этот отрывок кода:

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

И не забываем добавить стили, чтобы искомые слова выделялись:

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

На этом все, идем дальше.

Исключение определенных категорий из поиска.

Если есть такая нужда исключить какую-то категорию или даже несколько из поиска, то это можно сделать следующим способом. Открыть файл functions.php и в самом конце перед знаком ?> добавьте код:

<?php
function SearchFilter($query) {
if ($query->is_search) {
$query->set('cat','1,12');
}
return $query;
}
add_filter('pre_get_posts','SearchFilter');
?>

В четвертой строке прописываем ID категорий, которые нужно исключить, если больше одной, то прописываем через запятую. Как узнать ID категорий читаем тут.

Улучшение страницы «не найденных результатов»

Во многих темах на данной страницы выводится минимальная информация по запросу поиска. К примеру, посетитель вашего сайта вбивает в поиск какую-то фразу или название статьи, в общем, то что хочет найти. И в случае, если не будет совпадений, поиск скажет «результатов нет» или что-то в этом роде, и больше ничего. Нужно исправить этот минимум и расширить на более расширенный результат.

Сделаем, чтобы выводилась все информация, которая есть на сайте (блоге).
Нужно открыть снова файл search.php, и найти стандартную надпись, примерно такую:

<h2 class="page-title"><?php _e( 'Nothing Found', '' ); ?></h2>

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

<div class="pageser">
<h2 class="sercen">К сожалению, ничего не найдено. Возможно список ниже Вам поможет.</h2>
<br /><br />
<h3>Все страницы:</h3>
    <ul>
        <?php wp_list_pages('title_li='); ?>
    </ul>
        <h3>Все статьи:</h3>
     <ul>
        <?php $archive_query = new WP_Query('showposts=1000');
        while ($archive_query->have_posts()) : $archive_query->the_post(); ?>
        <li><a href="<?php the_permalink() ?>" rel="bookmark" title="Постоянная ссылка на <?php the_title(); ?>"><?php the_title(); ?></a> <strong><?php comments_number('0', '1', '%'); ?></strong></li>
        <?php endwhile; ?>
     </ul>
        <h3>Архив блога по месяцам:</h3>
     <ul>
        <?php wp_get_archives('type=monthly'); ?>
     </ul>
        <h3>Рубрики:</h3>
      <ul>
        <?php wp_list_categories('title_li=0'); ?>
      </ul>
</div>

Последнее — добавим стили:

.pageser h2 {
text-align:center;
}

.pageser h2,h3 {
border-bottom:1px solid #CCCCCC;
}
.pageser li {
list-style-image:url(images/imgul.png) ;
margin-left:25px;
}

Стили можете отредактировать под ваш дизайн, и добавьте изображение где указано в стилях. Это будет вместо маркеров ul. Таким образом мы улучшили оформление поиска в WordPress.

Автор, он же Андрей, он же Admin, он же WordSmall

Лентяй-любитель, окончил высшую школу безделья с многочисленными знаками отличия. Создатель этого небольшого «чудо-блога» о еще более «чудном» контенте.

E-mail Google+ Twitter
Комментариев: 4
  • Сергей

    Когда копируешь код со страницы — выделяются так же номера строк, потом их нужно удалять вручную. Исправьте, пожалуйста.

    • WordSmall

      Спасибо за подсказку! Исправлено!

  • шура

    спасибо лентяю!!! помог! подсказал идеи!! сенкъю вери мач

Добавить комментарий
bold quote code