Как исключить определённые страницы из поиска WordPress без плагинов

Проблема: нежелательные страницы появляются в результатах поиска WordPress

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

Диагностика: как проверить, что страницы участвуют в поиске

Для начала убедитесь, что страницы действительно отображаются в результатах поиска.

  • Перейдите на сайт, выполните поиск по части заголовка или содержимого страницы, которую хотите исключить.
  • Если страница отображается — значит, WordPress её учитывает.
  • Также можно проверить SQL-запрос поиска через плагин Query Monitor или включив отладку WP_DEBUG и просмотром запросов к базе.

Решение: исключение страниц из результатов поиска через functions.php

Самый надёжный способ — использовать хук pre_get_posts, который позволяет модифицировать основной запрос поиска.

Пример кода для исключения страниц по ID:

function exclude_pages_from_search(\WP_Query $query) {
    if ( !is_admin() && $query->is_search() && $query->is_main_query() ) {
        // ID страниц, которые нужно исключить из поиска
        $excluded_ids = array(42, 56, 78);

        $query->set('post__not_in', $excluded_ids);
    }
}
add_action('pre_get_posts', 'exclude_pages_from_search');

Если нужно исключить страницы по шаблону URL или по определённому метаполю, можно расширить логику. Например, исключение по метаполю exclude_from_search=1:

function exclude_pages_by_meta_from_search(\WP_Query $query) {
    if ( !is_admin() && $query->is_search() && $query->is_main_query() ) {
        $meta_query = array(
            array(
                'key' => 'exclude_from_search',
                'compare' => 'NOT EXISTS'
            )
        );
        $query->set('meta_query', $meta_query);
    }
}
add_action('pre_get_posts', 'exclude_pages_by_meta_from_search');

Пример добавления метаполя к странице

Для удобства можно вручную добавить метаполе через админку или программно:

update_post_meta(42, 'exclude_from_search', '1');

Проверка результата после внедрения

  • Очистите кэш сайта и браузера, если установлен кэш.
  • Выполните поиск по ключевым словам, связанным с исключёнными страницами.
  • Убедитесь, что эти страницы больше не выводятся в результатах.
  • Если используете сторонние поисковые решения или плагины, проверьте, что изменения работают и там.

Частые ошибки и как их исправить

  • Код не работает, страницы не исключаются: проверьте, что функция подключена в файле functions.php активной темы или в кастомном плагине, и что хук pre_get_posts правильно применяется.
  • Исключаются не те записи: возможно, конфликтуют другие параметры запроса, или в запросе уже установлен post__not_in. Можно получить текущие исключения и добавить к ним новые:
function exclude_pages_from_search(\WP_Query $query) {
    if ( !is_admin() && $query->is_search() && $query->is_main_query() ) {
        $excluded_ids = array(42, 56, 78);
        $current_exclude = $query->get('post__not_in');
        if ( !is_array($current_exclude) ) {
            $current_exclude = array();
        }
        $query->set('post__not_in', array_merge($current_exclude, $excluded_ids));
    }
}
add_action('pre_get_posts', 'exclude_pages_from_search');
  • Неверный идентификатор страницы: убедитесь, что ID страниц правильные. Можно получить ID через админку или из URL при редактировании.
  • Кэширование мешает проверить изменения: отключите кэш или очистите его после внесения изменений.

Практические советы по безопасности и производительности

  • Избегайте больших массивов ID в post__not_in, это может замедлить запросы.
  • Используйте метаполя для группового управления исключениями — например, ставьте метаполе exclude_from_search=1 на нужные страницы, чтобы не редактировать код при добавлении новых.
  • Не меняйте запросы в админке (проверка !is_admin() обязательна).
  • Если сайт имеет много контента, рассмотрите использование специализированных поисковых решений (например, ElasticSearch), где фильтры настраиваются централизованно.

Сравнение вариантов исключения страниц из поиска

МетодПлюсыМинусыПрименимость
Редактирование pre_get_posts в functions.phpБез плагинов, точечный контроль, гибкостьТребует навыков программированияМалые и средние сайты
Плагины типа Search ExcludeПростота, интерфейс для выбора страницДополнительная нагрузка, зависимость от плагинаДля пользователей без навыков кода
Использование метаполей с фильтром в запросеГибко, централизованное управление через админкуНужно внедрять код для фильтрацииБольшие сайты с множеством исключений
Как отключить AJAX в WooCommerce для ускорения страницы корзины
12.05.2026
WooCommerce: автоматическое изменение цены и наличия товара при изменении атрибутов
28.06.2026
Как автоматизировать управление ролями пользователей в WordPress с помощью кода
01.02.2026
Как создать автоматические отчёты в WordPress с помощью PHP и WPRemark
29.12.2025
Автоматическое изменение статуса отзывов WooCommerce после покупки
04.05.2026