/ Wordpress / Категории в результатах поиска

Категории в результатах поиска

HIT

23.12.2016

4132

3

Выведем в результатах поискового запроса категории. Категории будут выведены перед найденными записями.

Категории в результатах поиска

Вставляем в шаблон вывода результатов поиска (search.php), перед началом цикла if(have_posts()) :

<?php $search_term = explode( ' ', get_search_query( false ) );
global $wpdb;

$select = "
SELECT DISTINCT t.*, tt.*
FROM wp_terms AS t
INNER JOIN wp_term_taxonomy AS tt
ON t.term_id = tt.term_id
WHERE tt.taxonomy IN ('category')";
$first = true;

foreach ( $search_term as $s ){
	if ( $first ){
		$select .= " AND (t.name LIKE '%s')";
		$string_replace[] = '%'.$wpdb->esc_like( $s ).'%';
		$first = false;
	}else{
		$select .= " OR (t.name LIKE '%s')";
		$string_replace[] = '%'. $wpdb->esc_like( $s ).'%';
	}
}
$select .= " ORDER BY t.name ASC";
$terms = $wpdb->get_results( $wpdb->prepare( $select, $string_replace ) );

if ( count($terms) > 0 ){
	echo '<ul>';
	foreach ( $terms as $term ) {
		echo '<li><a href="'.esc_url( get_term_link( $term ) ).'" title="'.esc_attr( $term->name ).'">' . esc_html( $term->name ) . '</a></li>';
	}
	echo '</ul>';
} ?>

В данном случае категории будут выводится в виде списка.

esc_url — очищает УРЛ для использования его в тексте, изменяет неправильные и удаляет опасные символы.
При «пустом» запросе, если ввести пробел выводятся термины различных таксономий, помимо категорий

Чтобы не было лишних терминов, при пустом запросе можно внутри конструкции foreach задать проверку каждого термина if ($term->taxonomy == ‘category’) :

Настройка вида категорий

Сделаем вывод категорий в развернутом виде (миниатюра, описание и т.д.). Модифицируем код вывода:

<?php if ( count($terms) > 0 ) : ?>

<h2>Найденные категории</h2>
<div id="podcat">

<?php foreach ( $terms as $term ) : ?>

<div class="block-podcategory">

<a href="<?php echo get_term_link( $term ); ?>" title="<?php echo $term->name; ?>">
<?php
$category = get_category( $term->term_id ); //Расширяем массив до параметров категории
if ( $category->term_image ) { echo wp_get_attachment_image( $category->term_image, 'square' ); }
else {echo '<div class="cat-image"><img src="'.get_template_directory_uri().'/images/img-default-square.jpg" /></div>';}
?>
</a>

<h2 class="title-2"><a href="<?php echo get_term_link( $term ); ?>" title="<?php echo $term->name; ?>"><?php echo $term->name; ?></a></h2>
<p class="count"><?php echo get_category($term)->category_count; ?></p>
<div class="descript-2"><p><?php if($term->description): ?><?php echo $term->description; ?><?php else: ?>Описание рублики<?php endif; ?></p></div>

</div>
<?php endforeach; ?>

</div>

<?php endif; ?>

$category = get_category( $term->term_id ); — вызываем для того чтобы расширить массив, и подгружать миниатюру категории.

Вышеописанное решение ищет поисковый запрос в названиях категорий, и не имеет особой ценности, если категорий не много. Изменим алгоритм на вывод категорий на основе найденных записей.

Категории найденных записей

Перебираем массив найденных записей, выводим все категории, в которых содержатся эти записи.

<?php  
	$args = array( 
		'posts_per_page' => -1, 
		'post_type' => 'post',
		's' => $wp_query->query['s'],
		'fields' => 'ids'
	);
	$searchposts = get_posts( $args );	
	
	$search_category_ids = array();

	foreach( $searchposts as $post ){ 
		$post_category = get_the_category( $post ); // Если у записи будет несколько категорий, то тут нужно делать массив
		$search_category_ids[] = $post_category[0]->term_id;
	}
	wp_reset_postdata(); 
	
	$search_category_ids_unique = array_unique($search_category_ids);
	
	echo '<h2>Записи найдены в следующих категориях</h2>';
	
	echo '<div id="podcat">';
	
	foreach( $search_category_ids_unique as $cat_id ){ 
		$cat = get_category( $cat_id );
		
		echo '<div class="block-podcategory"><div>';
		  
			echo '<a href="'.get_term_link( $cat ).'" title="'.$cat->name.'">';  
			if ( $cat->term_image ) { echo wp_get_attachment_image( $cat->term_image, 'square' ); } 
			else {echo '<div class="cat-image"><img src="'.get_template_directory_uri().'/images/img-default-square.jpg" /></div>';}
			echo '</a>';
				
			echo '<h2 class="title-2"><a href="'.get_term_link( $cat ).'" title="'.$cat->name.'">'.$cat->name.'</a></h2>';

		echo '</div></div>';
		
	}
	
	echo '</div>';	
?>
[site-socialshare]
  • Похожие записи
  • Комментарии
  • Вложения
Варианты при вводе запроса в поиск

Варианты при вводе запроса в поиск

При вводе поискового запроса удобно чтобы сразу выводились несколько вариантов с ссылками на страницы с искомым словосочетанием. Реализуем это минимальными действиями. Подлючение скрипта и стилей Подключаем все необходимые стили и Читать далее »

/
Поиск по сайту

Поиск по сайту

Поиск по сайту — важнейший инструмент позволяющий находить на сайте любую информацию. Плагины расширяющие функционал поиска Relevanssi — A Better Search (100 000) — улучшает и расширяет результаты поиска, более Читать далее »

/
Кнопка всплывающего поиска (+ курсор в поиске)

Кнопка всплывающего поиска (+ курсор в поиске)

Реализуем скрытый поиск, т.е. форма поиска изначально не показана и вызывается нажатие кнопки. Форму поиска и подложку вставляем в шапку (например, после открытия div main) Делаем кнопку или пункт меню Читать далее »

Добавить комментарий

3 комментария

  1. Николай

    Здравствуйте! Замечательный код! Очень полезный!
     
    Но есть вопрос… Можно ли сделать в цикле проверку на таксономии?
    То есть у меня на сайте в результатах поиска выскакивают как авторы, так и теги
    Можно ли сделать проверку? Если таксономия = avtory то выводить допустим с описанием, а если таксономия = tegi, то с картинкой??

    1. Alexandr

      У себя я использую код описанный выше — Категории найденных записей. Выводятся только категории. Возможно у Вас еще какая то функция добавляет и авторов.

  2. Юрий

    Здравствуйте! Очень помог ваш код «Категории в результатах поиска», благодарю! Единственный момент, которые не работает совсем верно. К примеру если ввожу в поиск «Белый клык», то у меня кроме самой категории «Белый клык» выводятся все категории со словом «Белый». А если в запросе будет содержаться буква, например «Кот и мышь», то выведутся все категории с буквой И. Как это поправить? Спасибо.

Категории в результатах поиска
Различные наработки по Woocommerce
Рекомендации для васРазличные наработки по WoocommerceOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.