Как сделать фильтр поисковых результатов по категориям и тегам

Как сделать фильтр поисковых результатов по категориям и тегам | n-wp.ru
Фильтр, позволяющий ограничивать результаты поиска по категориям и тегам, встречающимся в постах. Он позволяет сузить область поиска, сделав его более точным для посетителей.
👍 Научим бесплатно правильно создавать сайты на WordPress. Подробнее →

Поисковый запрос в блоге бывает слишком общим — отображается слишком большое количество постов. Область поиска в таком случае можно сузить, выведя все категории и все теги, которые встречаются в этих постах. Перейдя по ссылке категории, посетитель увидит все посты, в которых встречается искомое слово, принадлежащие этой категории — получится фильтр поисковых результатов по определенной категории или тегу.

Как сделать фильтр поисковых результатов по категориям и тегам

Чтобы создать такой фильтр, откройте файл functions.php, и добавьте в него этот код:

function search_filters(){
	if(is_search()) { ?>
			<?php 
			$searching = get_search_query();	
			$a=$b=$i=0;	
			$filter_categories_array = array();
			$filter_tags_array = array();	
			while (have_posts()) : the_post();
				foreach((get_the_category()) as $category) { 
    			$categores = '<span class="search-results-link"><a>cat_ID.'">'.$category->cat_name.'</a></span>'; 
    			$filter_categories_array[$i] = $categores; 
    			$i++;
				}	
				$all_the_tags = get_the_tags(); 
				if ($all_the_tags) {
				foreach($all_the_tags as $this_tag) { 
    			$this_tag = '<span class="search-results-link"><a>slug.'">'.$this_tag->name.'</a></span>'; 
    			$filter_tags_array[$a] = $this_tag; 
    			$a++;
				}
				}
			endwhile;			

			$clear_filter_categories_array = array_unique($filter_categories_array); 
			$clear_filter_tags_array = array_unique($filter_tags_array); 
			$clear_filter_date_array = array_unique($filter_date_array); 
			echo "<div><span class='search-cat-title'>Категории</span>";
			for($i=0;$i<count($filter_categories_array);$i++) {		
				echo $clear_filter_categories_array[$i];	
			}
			echo "</div>";			
			if ($filter_categories_array == null ) {
				echo "";
			}
			?>
			<?php
			echo "<div class='search-tags-div'><span class='search-tags-title'>Метки</span>";
			for($i=0;$i<count($filter_tags_array);$i++) {	
				echo $clear_filter_tags_array[$i];	
			}
			echo "</div>";
			if ($filter_tags_array == null ) {
				echo "";
			}
			?>
		<?php } 
	}

Каждая ссылка, выводимая этим фильтром — это поисковый запрос, ограниченный определенной категорией или тегом. Например, ссылка на категорию имеет такой код:

</pre>
<p>XXX — это поисковый запрос, CAT_ID — это ID категории, которой ограничивается область поиска. Осталось только внедрить фильтр в шаблон. Например, можно вывести этот фильтр  на странице результатов поиска search.php:</p>
<pre>

Можно вставить фильтр в header.php, вставив условие показывать его только на странице результатов поиска:


    

Надеюсь, что фильтр поможет сделать блог более удобным для читателей.

Создай свой первый сайт на WordPress

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

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

  1. ARTEM

    НЕ РАБОТАЕТ :

    array_unique() expects parameter 1 to be array_unique( 
    Ответить