Підсвічування результатів пошуку, без використання плагінів
Існує чимало плагінів для покращення пошуку в WordPress. Є такі, що змінюють алгоритм пошуку, а є які роблять пошук зручнішим. У цій нотатці мова йтиме саме про таку плагін. Я хочу трохи покращити стандартний пошук WordPress: зробити підсвічування шуканих слів.

Завдання: зробити підсвічування результатів пошуку без використання плагінів. Вирішується нижче представленим способом, а точніше функцією, яка по суті аналогічна, мабуть, найпростішому плагіну для підсвічування результатів пошуку WordPress – Search Hilite (підсвічуються слова і більше ніяких дій).
Помістіть код у файл шаблону functions.php .
add_filter( 'the_content', 'kama_search_highlight');
add_filter( 'get_the_excerpt', 'kama_search_highlight');
add_filter( 'the_title', 'kama_search_highlight');
/**
* Highlight search words in specified text.
*
* @param string $text The text ви хочете, щоб висвітлити слова в.
*
* @return string
*
* @version 0.1
*/
function kama_search_highlight( $text ){
// settings
$styles = ['',
'color: #000; background: #99ff66;',
'color: #000; background: #ffcc66;',
'color: #000; background: #99ccff;',
'color: #000; background: #ff9999;',
'color: #000; background: #FF7EFF;',
];
// for search pages і main loop only.
if( ! is_search() || ! in_the_loop() )
return $text;
$query_terms = get_query_var('search_terms');
if( empty( $query_terms ) )
$query_terms = array_filter((array) get_search_query());
if( empty( $query_terms ) )
return $text;
$n = 0;
foreach( $query_terms as $term ){
$n++;
$ term = preg_quote ($ term, '/');
$text = preg_replace_callback( "/$term/iu", static 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_highlight');
Також будуть підсвічувати слова в меню сайту, яке виводиться через wp_nav_menu() .
Підсвічування чого завгодно
Якщо для виведення пошуку використовуються функції, відмінні від the_excerpt() або the_content(), то щоб підсвічування працювало, потрібно «прогнати» текст через цю функцію.
Допустимо, ви використовуєте для виведення результатів пошуку функцію get_my_excerpt() , тоді, щоб підсвічування працювало, висновок потрібно буде записати таким чином:
$search_result = get_my_excerpt(); echo kama_search_highlight($search_result);
Оновлення
29.04.2010
Дякую Ю.Б. за підказку (у коментарях) використовувати модифікатор u для регулярного вираження – код значно скоротився.
21.04.2010
Були незрозумілі баги з підсвічуванням – не всі слова підсвічувалися. Як з’ясувалося, проблема була в регулярному вираженні я її спростив, тепер підсвічується все.
- Тепер підсвічування реєстронезалежне для кирилиці, тобто. якщо в пошуку задано наприклад, слово ” пошук “, то підставляться слова: ” Пошук “, “пошук” або “ПОШУК”. Ця проблема існує й у плагіні Search Hilite. Давно хотів поправити цей баг – довелося попотіти, поки зрозумів, де собака заритий.