Підсвічування результатів пошуку, без використання плагінів
Існує чимало плагінів для покращення пошуку в 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. Давно хотів поправити цей баг – довелося попотіти, поки зрозумів, де собака заритий.