WordPress как на ладони
Черная пятница на хостинге fornex.com! Хостинг, VPS/VDS и отдельные сервера только на SSD дисках. 7 дней бесплатного тестирования.

Подсветка результатов поиска, без использования плагинов

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

Задача: сделать подсветку результатов поиска, без использования плагинов. Решается ниже представленным способом, а точнее функцией, которая по сути аналогична, пожалуй, самому простому плагину для подсветки результатов поиска в WordPress — Search Hilite  (подсвечиваются слова и больше никаких действий).

Поместите код в файл шаблона functions.php.

## Функция для подсветки слов поиска в WordPress
add_filter('the_content', 'kama_search_backlight');
add_filter('the_excerpt', 'kama_search_backlight');
add_filter('the_title', 'kama_search_backlight');
function kama_search_backlight( $text ){
	// ------------ Настройки -----------
	$styles = ['',
		'color: #000; background: #99ff66;',
		'color: #000; background: #ffcc66;',
		'color: #000; background: #99ccff;',
		'color: #000; background: #ff9999;',
		'color: #000; background: #FF7EFF;',
	];

	// только для страниц поиска...
	if ( ! is_search() ) return $text;

	$query_terms = get_query_var('search_terms');
	if( empty($query_terms) ) $query_terms = array(get_query_var('s'));
	if( empty($query_terms) ) return $text;

	$n = 0;
	foreach( $query_terms as $term ){
		$n++;

		$term = preg_quote( $term, '/' );
		$text = preg_replace_callback( "/$term/iu", function($match) use ($styles,$n){
			return '<span style="'. $styles[ $n ] .'">'. $match[0] .'</span>';
		}, $text );
	}

	return $text;
}

Функция будет работать, если в файле search.php у вас для вывода результатов поиска используется функция the_excerpt() или the_content(). Если вывод осуществляется нестандартно, читайте ниже.

В самом начале кода можно настроить стили найденных слов: $st1 - первое слово, $st2 - второе и т.д.

По умолчанию цвета такие: Подсвечиваем результаты поиска, без плагинов.

Подсветка чего угодно

Если для вывода поиска используются функции отличные от the_excerpt() или the_content(), то чтобы подсветка работала, нужно «прогнать» выводимый текст через эту функцию.

Допустим, вы используете для вывода результатов поиска функцию get_my_excerpt(), тогда, чтобы подсветка работала вывод нужно будет записать подобным образом:

$search_result = get_my_excerpt();
echo kama_search_backlight($search_result);

Обновления

29.04.2010
Спасибо Ю.Б. за подсказку (в комментариях) использовать модификатор u для регулярного выражения - код значительно сократился.

21.04.2010

  1. Были непонятные баги с подсветкой - не все слова подсвечивались. Как выяснилось проблема была в регулярном выражении я ее упростил, теперь подсвечивается все.

  2. Теперь подсветка регистронезависима для кириллицы, т.е. если в поиске задано например, слово "поиск", то подставятся слова: "Поиск", "поиск" или "ПОИСК". Эта проблема существует и в плагине Search Hilite. Давно хотел поправить этот баг - пришлось попотеть, пока понял где собака зарыта.

Wulcanclub.ru

Преимущества игрового клуба вулкан wulcanclub.ru

wulcanclub.ru

24 коммента
Вопросы 1 Все
  • Роман cайт: jblog-project.ru

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

    Ответить3.7 года назад #
  • smspivak

    такая подсветка работает НА ВСЕЙ СТРАНИЦЕ, то есть, в сайдбаре, например, или в футере, тоже будет выделение

    Ответить1.8 год назад #
    • Kama7021

      Как вызываешь фукнцию?

      Ответить1.8 год назад #
      • Михаил2 cайт: trapeznaya.ucoz.ru

        Да. Тоже подсветились слова в пунктах основного меню. Вызывал помещением кода в functions.php

        Ответить1.2 год назад #
        • Михаил2 cайт: trapeznaya.ucoz.ru

          Убрал строку //add_filter('the_title', 'kama_search_backlight', 30); и проблема ушла.

          1
          Ответить1.1 год назад #
  • Alex

    Спасибо за полезную статью. Но вот вопрос такой - как вывести в результат поиска именно те части результатов, которые содержат искомые слова? Обычно выводится обрезанное начало страницы/записи или можно целиком, но тогда бесконечная простынь выходит.

Здравствуйте, !     Войти . Зарегистрироваться