По умолчанию функционал поиска в WordPress показывает в результатах все типы записей и страниц. Вы можете захотеть убрать из поиска страницы, категорию, таксономию или записи конкретного автора.

Чтобы это осуществить нам нужно поправить основной запрос is_search() на хуке pre_get_posts. Рассмотрим примеры.

Как скрыть из поиска страницы

Вы можете использовать следующий код, чтобы оставить в результатах поиска только тип поста post.

add_action( 'pre_get_posts', 'skill_search_filter' );
function skill_search_filter( $query ){
	if( ! is_admin() && $query->is_main_query() && $query->is_search ){
		$query->set( 'post_type', 'post' );
	}
}

Т.к. здесь нет такого метода как unset, мы можем только переназначить переменные методом set.

Что касается условий, то мы проверяем, что находимся не в админке, что это основной запрос и что это запрос поисковый.

Будьте аккуратнее, этим кодом вы исключите из поиска не только стандартные страницы, но и все записи пользовательского типа.

Как скрыть из поиска категорию

Чтобы исключить посты определенной категории из результатов поиска воспользуйтесь следующим примером:

add_action( 'pre_get_posts', 'skill_search_filter' );
function skill_search_filter( $query ){
	if( ! is_admin() && $query->is_main_query() && $query->is_search ){
		$query->set( 'cat','-2,-3' );
	}
}

В результате работы этого фильтра будут исключены посты, которые находятся в категориях 2 и 3 из результатов поиска.

Если пост прикреплен одновременно к категориям 3 и 4, он не будет исключен из результатов поиска этим фильтром.

Как скрыть из поиска кастомный тип записи

Для исключения из поиска результатов произвольного типа записей достаточно установить аргумент 'public' = 'false' при регистрации (функция register_post_type()), но если такой возможности нет, вы также можете воспользоваться этим хуком.

Здесь нам понадобится модификация первого примера: нам нужно передать в $query только те типы постов, которые мы хотим оставить в результатах поиска.

add_action( 'pre_get_posts', 'skill_search_filter' );
function skill_search_filter( $query ){
	if( ! is_admin() && $query->is_main_query() && $query->is_search ){
		$query->set('post_type', array( 'post', 'portfolio', 'service' ) );
	}
}

Например, этот код оставит в результатах поиска только посты, страницы портфолио и услуги.

Как скрыть из поиска записи автора

Чтобы скрыть записи определенного автора используйте следующий код:

add_action( 'pre_get_posts', 'skill_search_filter' );
function skill_search_filter( $query ){
	if( ! is_admin() && $query->is_main_query() && $query->is_search ){
		$query->set ( 'author','-8, -10, -12' );
	}
}

В результате его выполнения будут исключены записи авторов, имеющих ID 8, 10 и 12.

С помощью плагина

Если вы по каким-то причинам не хотите править код вашего сайта, вы можете воспользоваться бесплатным плагином Search Exclude. Там достаточно простые и интуитивно понятные настройки.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *