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

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

В интернет-магазинах на WooCommerce иногда возникает необходимость убрать определённые категории (разделы) товаров из публичного каталога, поиска и виджетов. Это может быть связано с временной недоступностью товаров, сезонными акциями или внутренними ограничениями. Часто пользователи пытаются сделать это через плагины, которые могут замедлять сайт или приводить к конфликтам. В данной статье рассмотрим, как решить задачу программно, без сторонних расширений.

Пошаговое решение: исключение категорий товаров из вывода

1. Исключение категорий из каталога и поиска

WooCommerce использует стандартный WordPress-запрос pre_get_posts для вывода товаров. Чтобы исключить товары определённых категорий, нужно изменить параметры запроса.

function exclude_product_categories_from_shop_and_search( $query ) {
    if ( ! is_admin() && $query->is_main_query() ) {
        if ( is_shop() || is_product_category() || is_search() ) {
            // Список slug категорий для исключения
            $excluded_cats = array( 'skidka', 'rasprodazha' );

            $tax_query = (array) $query->get( 'tax_query' );
            $tax_query[] = array(
                'taxonomy' => 'product_cat',
                'field'    => 'slug',
                'terms'    => $excluded_cats,
                'operator' => 'NOT IN',
            );

            $query->set( 'tax_query', $tax_query );
        }
    }
}
add_action( 'pre_get_posts', 'exclude_product_categories_from_shop_and_search' );

Этот код нужно добавить в файл functions.php вашей темы или в кастомный плагин. Он исключит категории с ярлыками skidka и rasprodazha из страниц магазина и поиска.

2. Удаление категорий из виджетов WooCommerce

По умолчанию виджет категорий WooCommerce не учитывает фильтры запроса. Для исключения категорий из виджета можно использовать фильтр woocommerce_product_categories_widget_args:

function exclude_categories_from_widget( $args ) {
    $excluded_cats = array( 'skidka', 'rasprodazha' );
    if ( ! isset( $args['exclude'] ) ) {
        $args['exclude'] = '';
    }
    $excluded_slugs = implode( ',', $excluded_cats );
    if ( $args['exclude'] ) {
        $args['exclude'] .= ',' . $excluded_slugs;
    } else {
        $args['exclude'] = $excluded_slugs;
    }
    return $args;
}
add_filter( 'woocommerce_product_categories_widget_args', 'exclude_categories_from_widget' );

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

  • Перейдите на страницу магазина (Shop) и убедитесь, что товары из категорий skidka и rasprodazha не отображаются.
  • Выполните поиск товаров, убедитесь, что товары из исключённых категорий отсутствуют в результатах.
  • Проверьте виджет категорий WooCommerce на боковой панели — указанные категории должны отсутствовать.
  • Для контроля можно временно вывести SQL-запросы или использовать Debug Bar для проверки изменения параметров основного запроса.

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

  • Код не работает на страницах с кэшированием. Решение: очистите кэш сайта и браузера, временно отключите кэш-плагины, чтобы проверить изменения.
  • Категории не исключаются из виджета. Проверьте, что виджет не настроен на показ всех категорий, и фильтр woocommerce_product_categories_widget_args корректно подключён.
  • Неправильно указаны ярлыки категорий. Проверьте slug категорий в разделе Товары → Категории в админке WooCommerce.
  • Код добавлен в дочернюю тему, но тема не активна. Проверьте, что активна именно та тема, в functions.php

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

  • Используйте фильтры WordPress и WooCommerce для решения задач, избегайте прямых SQL-запросов — так не нарушается безопасность и совместимость.
  • Кэширование: если используете серверный кэш или CDN, настройте исключения для страниц магазина, чтобы изменения отображались мгновенно.
  • Всегда тестируйте изменения на staging-сайте перед продакшеном.
  • Включите WP_DEBUG и используйте инструменты для отладки запросов, например Query Monitor, чтобы контролировать работу фильтров.

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

Метод Плюсы Минусы
Код в functions.php с фильтром pre_get_posts Лёгкий, не требует плагинов, гибкий Требует базовых знаний PHP и WordPress API
Использование плагинов для скрытия категорий Простота настройки через интерфейс Может замедлить сайт, конфликты с другими плагинами
Изменение шаблонов темы Полный контроль над выводом Сложно поддерживать при обновлениях темы
Как удалить и исключить разделы товаров WooCommerce без плагинов
22.07.2026
Добавление коллекции атрибутов для товаров WooCommerce без плагинов: практическое руководство
21.06.2026
Как избежать проблем с неработающими email-уведомлениями WooCommerce
08.05.2026
Как изменить отображаемое авторское имя в WordPress без плагинов
11.02.2026
Установка и настройка Sentry для отслеживания ошибок WordPress
11.07.2026