@Aleksander911

Как вывести результат поиска списком предложениями?

Доброго дня, всем!
WP по умолчанию выводит результат поиска не совсем удачно, т.е. выводит весь текст.
Подскажите как можно сделать такой вид вывода результата поиска: допустим есть запрос слово "дядя" и надо вывести только предложение, где есть это слово с ссылкой на статью. А если в статье есть и другие предложения с этим словом, то и каждое из этих предложений выводить с ссылкой.
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
@Aleksander911 Автор вопроса
Вопрос решил через плагин Relevanssi.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
На странице с поиском у вас есть глобальный запрос постов из которого вы можете достать контент записей, распарсить их регулярками и вывести во фронт. Для подсветки слов можете использовать этот код

if ( ! function_exists( 'wpgen_search_highlight' ) ) {

	/**
	 * Highlight search results.
	 *
	 * @param string $text is text for highlight.
	 *
	 * @return string
	 */
	function wpgen_search_highlight( $text ) {

		$s = get_query_var( 's' );

		if ( is_search() && in_the_loop() && ! empty( $s ) ) :

			$style       = 'background-color:#307FE2;color:#fff;font-weight:bold;';
			$query_terms = get_query_var( 'search_terms' );

			if ( ! empty( $query_terms ) ) {
				$query_terms = explode( ' ', $s );
			}
			if ( empty( $query_terms ) ) {
				return '';
			}

			foreach ( $query_terms as $term ) {
				$term  = preg_quote( $term, '/' ); // like in search string.
				$term1 = mb_strtolower( $term ); // lowercase.
				$term2 = mb_strtoupper( $term ); // uppercase.
				$term3 = mb_convert_case( $term, MB_CASE_TITLE, 'UTF-8' ); // capitalise.
				$term4 = mb_strtolower( mb_substr( $term, 0, 1 ) ) . mb_substr( $term2, 1 ); // first lowercase.
				$text  = preg_replace( "@(?<!<|</)($term|$term1|$term2|$term3|$term4)@i", "<span style=\"{$style}\">$1</span>", $text );
			}

		endif; // is_search.

		return $text;

	}
}
add_filter( 'the_title', 'wpgen_search_highlight' );
add_filter( 'the_content', 'wpgen_search_highlight' );
add_filter( 'the_excerpt', 'wpgen_search_highlight' );
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы