wpnotes.ru wordpress WP Notes

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

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

По умолчанию WordPress включает все публичные типы записей в результаты стандартного поиска, включая товары WooCommerce (тип записи product). Это может быть нежелательно, если у вас большой ассортимент, и вы хотите отделить поиск по товарам от поиска по контенту сайта (статьям, страницам). Такое разделение улучшает UX и снижает нагрузку на поиск.

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

  1. Откройте стандартную форму поиска WordPress.
  2. Впишите название известного товара.
  3. Если в результатах отображается товар, значит он включен в поиск.

Если это нежелательно — нужно исключить товары из поисковой выдачи.

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

Самый надежный способ — использовать фильтр pre_get_posts в файле functions.php вашей активной темы или дочерней темы. Он позволяет изменить параметры основного запроса WordPress до выполнения.

Код для исключения товаров WooCommerce из основного поиска:

function exclude_products_from_search( $query ) {
    if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
        // Получаем текущие типы записей для поиска
        $post_types = $query->get('post_type');
        // Если post_type не установлен, значит поиск по всем публичным типам
        if ( empty( $post_types ) ) {
            // Исключаем product из поиска
            $query->set('post_type', array( 'post', 'page' ));
        } elseif ( is_array( $post_types ) ) {
            // Если post_type задан массивом, удаляем product из него
            $post_types = array_diff( $post_types, array( 'product' ) );
            if ( empty( $post_types ) ) {
                // Если после удаления ничего не осталось, заменяем на пустой массив, чтобы не искать
                $post_types = array( 'post' );
            }
            $query->set('post_type', $post_types);
        } elseif ( $post_types === 'product' ) {
            // Если стоит только product, заменяем на post
            $query->set('post_type', 'post');
        }
    }
}
add_action( 'pre_get_posts', 'exclude_products_from_search' );

Этот код исключит товары из стандартного поиска, оставив только посты и страницы. Если у вас другие типы записей для поиска, добавьте их в массив post_type.

Как проверить, что решение сработало

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

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

  • Код добавлен в неподходящее место. Убедитесь, что функция добавлена в functions.php активной темы, а не в плагине, который отключается.
  • Не проверяется условие is_search(). Без этого фильтр повлияет на все запросы, включая админку и архивы.
  • Неправильная работа с параметром post_type. Если он не массив, используйте соответствующую логику, иначе произойдут ошибки.
  • Кеширование. Если используется кеширование страниц или поисковых запросов, изменения могут не применяться сразу.

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

  • Оптимизация: Исключение товаров из основного поиска уменьшает нагрузку на базу, особенно если у вас много товаров.
  • Безопасность: Не используйте прямое SQL вмешательство для исключения товаров — это может привести к уязвимостям.
  • Расширяемость: Если в будущем нужно будет искать товары отдельно — создайте отдельную форму поиска с параметром post_type=product.

Сравнение вариантов решения

МетодПлюсыМинусы
Фильтр pre_get_posts (код)Без плагинов, гибко, контролируемоНужен доступ к коду, может ошибиться новичок
Плагины (например Search Exclude)Просто, UI для выбораДополнительный плагин, нагрузка, ограничения по настройкам
Изменение шаблонов поискаТонкая настройка выводаСложнее в поддержке, требует PHP навыков
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше