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

Існує чимало плагінів для покращення пошуку в 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

  1. Були незрозумілі баги з підсвічуванням – не всі слова підсвічувалися. Як з’ясувалося, проблема була в регулярному вираженні я її спростив, тепер підсвічується все.

  2. Тепер підсвічування реєстронезалежне для кирилиці, тобто. якщо в пошуку задано наприклад, слово ” пошук “, то підставляться слова: ” Пошук “, “пошук” або “ПОШУК”. Ця проблема існує й у плагіні Search Hilite. Давно хотів поправити цей баг – довелося попотіти, поки зрозумів, де собака заритий.

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *