wpnotes.ru wordpress WP Notes

Как исключить товары WooCommerce из общего поиска WordPress

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

По умолчанию WordPress включает все типы записей, включая товары WooCommerce, в результаты поиска. Это не всегда удобно: товары могут засорять общие поисковые выдачи блога или страниц с контентом. Особенно это актуально для сайтов с большим каталогом товаров и активным блогом, где поиск должен работать только по статьям или определённым типам записей.

Основная задача — ограничить поисковый запрос только нужными типами записей, исключив при этом товары WooCommerce (post_type = 'product').

Пошаговое решение: как исключить товары WooCommerce из поиска

1. Фильтрация запроса поиска через хук pre_get_posts

Самый надёжный способ — перехватить основной запрос поиска и изменить параметры так, чтобы товары WooCommerce в него не попадали.

function exclude_products_from_search( \WP_Query $query ) {
    if ( !is_admin() && $query->is_main_query() && $query->is_search() ) {
        // Получаем текущие типы записей для поиска
        $post_types = $query->get('post_type');

        // Если типы записей не заданы, по умолчанию ищем по 'post' и 'page'
        if ( empty($post_types) ) {
            $post_types = ['post', 'page'];
        }

        // Если типы записей — строка, преобразуем в массив
        if ( is_string($post_types) ) {
            $post_types = [$post_types];
        }

        // Исключаем 'product' из поиска
        $post_types = array_filter($post_types, function($type) {
            return $type !== 'product';
        });

        // Если после фильтрации нет типов, задаём 'post' по умолчанию
        if ( empty($post_types) ) {
            $post_types = ['post'];
        }

        $query->set('post_type', $post_types);
    }
}
add_action('pre_get_posts', 'exclude_products_from_search');

2. Проверка, что товары точно не участвуют в поиске

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

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

  • Выполните поиск по сайту через стандартную форму поиска.
  • Запишите ключевые слова, которые есть в названиях товаров и статей.
  • Сравните результаты с и без внедрённого кода.
  • Проверьте, что в результатах нет страниц с post_type = 'product'.
  • Проверьте работу поиска в админ-панели — там поведение не должно измениться.

Частые ошибки при исключении товаров из поиска WooCommerce

  • Код добавлен неправильно или в неподходящее место. Добавляйте код в functions.php дочерней темы или в собственный плагин, чтобы избежать потери при обновлениях.
  • Неправильная проверка в условии pre_get_posts. Обязательно используйте !is_admin() и $query->is_main_query(), чтобы не влиять на запросы в админке или дополнительные запросы.
  • Игнорирование типа записи в запросе. Если в теме или плагинах уже изменён параметр post_type в поиске, фильтр может не сработать без дополнительной отладки.
  • Неочищенный кэш сайта. После изменения кода всегда очищайте кеш, иначе результат не обновится.

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

  • Используйте фильтр pre_get_posts, а не прямое изменение SQL-запроса, чтобы не ломать внутреннюю логику WordPress.
  • Минимизируйте количество вызовов и проверок условий, чтобы не замедлять загрузку страниц.
  • Если у вас много типов записей, явно задавайте массив нужных типов, чтобы избежать ошибок.
  • При использовании плагинов-кэшей (например, WP Super Cache, W3 Total Cache) не забудьте очистить кэш после внесения изменений.

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

МетодОписаниеПлюсыМинусы
Хук pre_get_postsИзменение параметров основного поискового запросаЧистый, официальный метод; не ломает логику WP; гибкийТребует понимания WP_Query; нужно правильно писать условия
Изменение SQL-запроса через posts_whereФильтрация на уровне SQLМожно точечно контролировать запросСложнее поддерживать; риск ошибок и проблем с плагинами
Использование плагинов для управления поискомГотовые решения с настройкамиУдобно для новичков; быстроДополнительная нагрузка; часто избыточные возможности

Дополнительные рекомендации

  • Если поиск должен работать только по блогу, можно явно задать post_type => ['post'].
  • В больших проектах с WPML или Polylang учитывайте языковые параметры в запросах.
  • Для комплексных настроек поиска рассмотрите WPSearch или SearchWP, но с ограничением по товарам используйте описанный код.
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее