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

Задача: сделать подсветку результатов поиска, без использования плагинов. Решается ниже представленным способом, а точнее функцией, которая по сути аналогична, пожалуй, самому простому плагину для подсветки результатов поиска в WordPress — Search Hilite (подсвечиваются слова и больше никаких действий).
Поместите код в файл шаблона functions.php.
add_filter( 'the_content', 'kama_search_backlight' ); add_filter( 'the_excerpt', 'kama_search_backlight' ); add_filter( 'the_title', 'kama_search_backlight' ); # Функция для подсветки слов поиска в WordPress 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_filter( [ 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 - второе и т.д.
По умолчанию цвета такие: Подсвечиваем результаты поиска, без плагинов.
Код лучше добавлять в сам файл поиска, непосредственно перед контентом, потому что если его добавить в functions.php, то из-за хука:
add_filter( 'the_title', 'kama_search_backlight' );
Также будут подсвечиваться слова в меню сайта, которое выводится через wp_nav_menu().
Подсветка чего угодно
Если для вывода поиска используются функции отличные от 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
-
Были непонятные баги с подсветкой - не все слова подсвечивались. Как выяснилось проблема была в регулярном выражении я ее упростил, теперь подсвечивается все.
- Теперь подсветка регистронезависима для кириллицы, т.е. если в поиске задано например, слово "поиск", то подставятся слова: "Поиск", "поиск" или "ПОИСК". Эта проблема существует и в плагине Search Hilite. Давно хотел поправить этот баг - пришлось попотеть, пока понял где собака зарыта.