WooCommerce: как автоматически изменять ставку НДС по типам товаров

Диагностика проблемы: когда и зачем менять НДС для разных товаров

В WooCommerce по умолчанию ставка НДС задаётся глобально для всех товаров или для отдельных налоговых классов. Если ваш магазин продаёт товары с разными ставками НДС (например, 20% для товаров общего назначения и 10% для образовательных курсов), стандартные настройки WooCommerce могут оказаться недостаточными. Обычно это вызывает ошибки в расчётах налогов и в итоговой стоимости заказа.

Проверить, что у вас именно такая проблема, можно так:

  • В настройках WooCommerce → Налоги проверьте, что заданы налоговые ставки.
  • Для разных типов товаров (например, обычный товар и курс) посмотрите, к каким налоговым классам они относятся.
  • При оформлении заказа в корзине сравните итоговую сумму налогов с ожидаемой — если ставки не соответствуют типу товара, значит, требуется автоматизация.

Пошаговое решение: автоматическое применение разных ставок НДС по типам товаров

1. Создаём налоговые классы

В админке WordPress зайдите в WooCommerce → Настройки → Налоги → Дополнительные налоговые классы. Добавьте, например, "Образовательные курсы".

2. Настраиваем ставки для каждого класса

В разделе Налоги появится новая вкладка "Образовательные курсы". Добавьте там ставку НДС, например, 10%. В стандартном классе оставьте 20%.

3. Автоматически назначаем налоговый класс в зависимости от типа товара

Для этого добавим фильтр в functions.php вашей темы или в плагин функционала:

add_filter('woocommerce_product_get_tax_class', 'set_tax_class_by_product_type', 10, 2);
function set_tax_class_by_product_type($tax_class, $product) {
    // Проверяем тип товара
    if ($product->is_type('course')) { // предполагаем, что тип товара 'course' для курсов
        return 'Образовательные курсы'; // имя налогового класса, указать точно как в настройках
    }
    // Для остальных товаров - стандартный класс
    return $tax_class;
}

Если у вас нет отдельного типа товара для курсов, можно использовать мета-поле или категорию:

add_filter('woocommerce_product_get_tax_class', 'set_tax_class_by_category', 10, 2);
function set_tax_class_by_category($tax_class, $product) {
    if (has_term('courses', 'product_cat', $product->get_id())) {
        return 'Образовательные курсы';
    }
    return $tax_class;
}

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

  • Создайте тестовый товар с категорией "courses" или типом "course".
  • Добавьте его в корзину и перейдите к оформлению заказа.
  • Проверьте, что ставка НДС на этот товар отображается 10%, а для других товаров — 20%.
  • Используйте инструменты разработчика браузера или включите режим отладки WooCommerce для проверки расчётов налогов.

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

  • Налоговый класс не применяется: Проверьте правильность имени класса, оно должно совпадать с тем, что в настройках WooCommerce, включая регистр.
  • Фильтр не срабатывает: Убедитесь, что код добавлен в активную тему или плагин, и что нет конфликтов с другими плагинами, которые меняют налоговые классы.
  • Тип товара 'course' не зарегистрирован: Если вы используете тип товара, убедитесь, что он существует. Иначе используйте категории или мета-поля.
  • Кэширование мешает проверить изменения: Очистите кэш сайта и браузера после внесения изменений.

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

  • Не используйте хардкод имён налоговых классов — лучше хранить их в константах или настраивать через админку.
  • Для производительности не делайте сложных запросов в фильтре woocommerce_product_get_tax_class, используйте кеширование, если проверяете категории или мета.
  • Проверяйте совместимость с плагинами кеширования и WooCommerce, чтобы избежать проблем с некорректным отображением цен.

Сравнение вариантов: использование плагина vs кастомный код

КритерийПлагин (например, WooCommerce Tax Manager)Кастомный код
ГибкостьВысокая, интерфейс для настройкиТребует программирования, полная кастомизация
ПроизводительностьЗависит от плагина, может добавить нагрузкуЛегковесное, только нужный функционал
БезопасностьЗависит от качества плагинаКонтролируется вами, меньше стороннего кода
ОбновленияОбновляется разработчикамиТребует поддержки при изменениях WooCommerce
ЦенаЧасто платныеБесплатно, если умеете писать код
Как использовать хук WooCommerce order status change для автоматизации
26.04.2026
WooCommerce: автоматическое удаление неактивных заказов
29.05.2026
Как создать массивный импорт курсов в WordPress с помощью AJAX и REST API
25.01.2026
WooCommerce: автоматическое обновление статуса заказа при оплате через платёжные системы
15.07.2026
Как создать собственный тип записи WordPress: пошаговое руководство
25.11.2025