wpnotes.ru wordpress WP Notes

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

Проблема: зачем исключать товары из поиска WordPress

По умолчанию WooCommerce добавляет товары в общий поиск WordPress, что не всегда требуется. Например, если на сайте есть блог и магазин, и вы хотите, чтобы поиск по блогу не показывал товары, чтобы не мешать пользователям. Или если используется кастомный поиск, где товары создают лишний шум.

В этом материале разберём, как исключить товары из поиска программно, без использования плагинов, что повышает производительность и прозрачность.

Диагностика проблемы

Для начала проверьте, что товары действительно участвуют в поиске:

  • Откройте страницу сайта с поиском.
  • Выполните поиск по известному товару.
  • Если товар появляется в результатах, значит он учитывается поиском WordPress.

Далее проверим типы записей, которые включены в поиск. В WordPress поиск по умолчанию затрагивает посты и страницы, WooCommerce добавляет товары с типом записи product.

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

Добавим в файл functions.php темы или в отдельный плагин следующий код:

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'];
        }

        // Исключаем тип 'product'
        if ( is_array($post_types) ) {
            $post_types = array_diff($post_types, ['product']);
        } elseif ( is_string($post_types) && $post_types === 'product' ) {
            $post_types = ['post', 'page'];
        }

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

Этот фильтр отлавливает основной запрос на странице поиска и исключает из параметров поиска тип записи product. Если явно не задан тип записи, он устанавливает поиск по постам и страницам.

Объяснение кода

  • is_main_query() — проверка, что это основной запрос WordPress.
  • is_search() — условие для поиска.
  • Получаем текущий параметр post_type и исключаем product.

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

  1. Обновите файл functions.php с кодом.
  2. Очистите кеш сайта и браузера.
  3. Зайдите на страницу поиска и выполните запрос по товару, который раньше показывался.
  4. Убедитесь, что товара в результатах нет.
  5. Проверьте, что посты и страницы по-прежнему находятся в выдаче.

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

  • Ошибка: товары все еще показываются в поиске.
    Причина: возможно, в запросе задан параметр post_type=product явно где-то в теме или плагине, или кэш не очищен.
    Решение: проверьте сторонние фильтры, очистите кеш, попробуйте временно переключиться на стандартную тему.
  • Ошибка: поиск перестал показывать страницы или посты.
    Причина: код заменил параметр post_type некорректно.
    Решение: убедитесь, что при удалении product из массива сохраняются другие типы записи, как показано в примере.
  • Ошибка: код вызывает ошибку PHP.
    Причина: синтаксическая ошибка при копировании.
    Решение: проверьте синтаксис, используйте IDE или редактор с подсветкой кода.

Практические советы по оптимизации и безопасности

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

Сравнение подходов: плагин vs код без плагина

ПодходПлюсыМинусы
Использование плагинов (например, Search Exclude)Простота настройки, интерфейс, дополнительные функцииДополнительная нагрузка, возможные конфликты, меньше контроля
Код через pre_get_posts (как в статье)Легковесность, полный контроль, нет зависимости от плагиновТребует навыков программирования, риски ошибок, отсутствие UI
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее