В процессе развития сайта на WordPress часто возникает задача исключить определённые страницы из результатов внутреннего поиска. Это может быть полезно для скрытия служебных страниц, страниц с конфиденциальной информацией или просто для улучшения релевантности поиска для пользователей. В этой статье подробно разберём, как удалить или скрыть страницу из поиска WordPress, используя разные подходы: через код и через плагины.
Почему важно контролировать результаты поиска WordPress
Поиск WordPress по умолчанию выводит все опубликованные записи и страницы, что не всегда удобно. Например, страница с политикой конфиденциальности, страницы с благодарностями или страницы регистрации могут не иметь смысла в результатах поиска. Если не исключить такие страницы, пользовательский опыт ухудшается, а поиск становится менее релевантным.
Кроме того, избыточный вывод страниц может привести к дополнительной нагрузке на базу данных, что нежелательно для крупных сайтов.
Как работает поиск WordPress: что нужно знать
Поиск в WordPress — это запрос к базе данных, который возвращает записи с типом post и page, статусом publish, соответствующие запросу пользователя. Для модификации результатов поиска нужно изменить WP_Query, который отвечает за выборку данных.
Это можно сделать двумя основными способами: с помощью фильтра pre_get_posts или через плагины, которые предоставляют удобный интерфейс для настройки.
Способ 1: Исключение страниц из поиска через фильтр pre_get_posts
Это самый гибкий и лёгкий способ, не требующий установки дополнительных плагинов. В functions.php вашей темы или в вашем собственном плагине добавьте следующий код:
function wpdo_exclude_pages_from_search($query) {
if ($query->is_search() && $query->is_main_query()) {
// ID страниц, которые нужно исключить из поиска
$excluded_pages = array(12, 34, 56);
$query->set('post__not_in', $excluded_pages);
}
}
add_action('pre_get_posts', 'wpdo_exclude_pages_from_search');Здесь в массиве $excluded_pages указываются ID страниц, которые нужно скрыть из поиска. Чтобы узнать ID страницы, откройте её в админке WordPress и посмотрите URL — там будет параметр post=ID.
Этот способ идеален, если у вас фиксированный список страниц для исключения.
Динамическое исключение по кастомному полю или метке
Если нужно исключать страницы динамически, например, по определённому мета-полю или категории, код можно расширить:
function wpdo_exclude_by_meta_from_search($query) {
if ($query->is_search() && $query->is_main_query()) {
$meta_query = array(
array(
'key' => '_wpdo_exclude_search',
'value' => '1',
'compare' => '='
)
);
$query->set('meta_query', $meta_query);
}
}
add_action('pre_get_posts', 'wpdo_exclude_by_meta_from_search');Теперь достаточно у нужных страниц добавить мета-поле _wpdo_exclude_search со значением 1, чтобы они автоматически исключались из поиска.
Способ 2: Использование плагинов для исключения страниц из поиска
Если вы предпочитаете не работать с кодом, можно использовать плагины. Рассмотрим два популярных варианта.
Плагин Search Exclude
Очень простой и удобный плагин, который добавляет на страницу редактирования записи или страницы чекбокс «Exclude from Search». Если поставить галочку, страница не будет отображаться в результатах поиска.
Плюсы:
- Простота использования
- Нет необходимости писать код
- Работает с любыми типами записей
Минусы:
- Мало настроек для сложных исключений
Плагин Relevanssi
Relevanssi — мощный плагин для улучшения поиска в WordPress. Помимо расширенного поиска, он позволяет исключать из результатов отдельные посты или страницы, а также настраивать индексацию по метаданным.
Как исключить страницы:
- Установите и активируйте Relevanssi.
- Перейдите в настройки плагина в админке.
- На вкладке Indexing добавьте ID страниц в поле «Exclude these posts from the index».
Relevanssi хорошо подходит для сайтов с большим объёмом контента и сложными требованиями к поиску.
Дополнительные рекомендации по оптимизации поиска
Чтобы сделать поиск на сайте ещё лучше, можно:
- Использовать пользовательские поля для тонкой настройки результатов.
- Добавлять пользовательские синонимы и стоп-слова (поддерживается, например, в Relevanssi).
- Кэшировать результаты поиска с помощью плагинов кеширования (Clearfy Pro, WP Super Cache и др.), чтобы снизить нагрузку на сервер.
- Добавлять подсказки и автодополнение с помощью AJAX-запросов — пример реализации можно найти в статье "WPDO: Как использовать AJAX в WordPress для динамического обновления контента".
Пример создания функции для массового исключения страниц из поиска по категории
Если на сайте используются категории и нужно исключить из поиска все страницы, принадлежащие определённой категории, можно сделать так:
function wpdo_exclude_category_pages_from_search($query) {
if ($query->is_search() && $query->is_main_query()) {
// Получаем ID категории
$category = get_category_by_slug('skrytye-stranicy');
if ($category) {
$args = array(
'post_type' => 'page',
'cat' => $category->term_id,
'fields' => 'ids',
'posts_per_page' => -1
);
$pages = get_posts($args);
if ($pages) {
$query->set('post__not_in', $pages);
}
}
}
}
add_action('pre_get_posts', 'wpdo_exclude_category_pages_from_search');Этот код автоматически исключит из поиска все страницы категории с ярлыком skrytye-stranicy.
Выводы и практические советы
Удаление или скрытие страниц из поиска WordPress — задача частая, но решаемая несколькими способами. Если вам нужно быстро исключить несколько страниц — используйте фильтр pre_get_posts. Если хотите удобный интерфейс — плагин Search Exclude отлично подойдёт.
Для сложных сайтов с большим количеством контента и кастомными требованиями к поиску лучше выбрать Relevanssi. Он же поможет улучшить пользовательский опыт поисковой системы на сайте.
Не забывайте тестировать поиск после внесения изменений, чтобы убедиться, что нужный контент доступен, а лишний — скрыт.
Если нужно, можно комбинировать методы: например, использовать Relevanssi для общей индексации и фильтр для исключения служебных страниц.
Для скачивания и подробного изучения плагинов советуем посещать официальные страницы на WPSHOP и WPSHOP.