WooCommerce: как установить разные ставки НДС на один товар

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

В WooCommerce стандартно можно указать только одну налоговую ставку на товар. Однако в ряде случаев, например, при продаже товара с разными вариантами (различные страны, регионы или типы покупателей), требуется применять разные ставки НДС к одному и тому же товару.

Для решения этой задачи нужно либо использовать расширенные настройки налогов WooCommerce с настройкой классов налогов, либо реализовать кастомную логику через хуки.

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

Для начала убедитесь, что в настройках WooCommerce включены налоги: WooCommerce > Настройки > Налоги, и что определена хотя бы одна налоговая ставка.

Проверьте, что для товара указана ставка налога (вкладка "Налог" в карточке товара). Если требуется несколько ставок, стандартный интерфейс не позволяет их добавить напрямую.

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

1. Создание классов налогов

Перейдите в WooCommerce > Настройки > Налоги > Дополнительные классы налогов. Добавьте новые классы, например:

  • НДС 10%
  • НДС 20%

Сохраните изменения.

2. Настройка ставок для классов налогов

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

3. Привязка класса налога к вариациям товара

Если товар вариативный, при редактировании вариации в поле "Класс налога" выберите нужный класс (например, "НДС 10%" или "НДС 20%"). Это позволит каждой вариации иметь свою ставку НДС.

4. Для простых товаров с разными налоговыми ставками — кастомный фильтр

Если товар простой, но для разных покупателей нужна разная ставка, используйте фильтр woocommerce_product_get_tax_class. Пример кода в functions.php темы:

add_filter('woocommerce_product_get_tax_class', 'custom_tax_class_for_product', 10, 2);
function custom_tax_class_for_product($tax_class, $product) {
    // Проверяем ID товара
    if ($product->get_id() === 123) { // замените 123 на ID нужного товара
        $user = wp_get_current_user();
        // Пример: для пользователей с ролью "wholesale_customer" ставка 10%
        if (in_array('wholesale_customer', (array) $user->roles)) {
            return 'НДС 10%';
        } else {
            return 'НДС 20%';
        }
    }
    return $tax_class;
}

Этот код меняет класс налога в зависимости от роли пользователя.

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

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

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

  • Налог не применяется или всегда одна ставка: проверьте, включены ли налоги в настройках WooCommerce и правильно ли настроены классы налогов.
  • Класс налога не меняется для простого товара: убедитесь, что фильтр woocommerce_product_get_tax_class правильно подключен и возвращает нужный класс.
  • Ставки налогов не видны в админке: проверьте, что вы добавили ставки именно в нужный класс налогов, а не в стандартный.
  • Конфликт с другими плагинами по налогам: временно отключите плагины, которые могут менять логику налогов, и проверьте работу.

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

  • Не используйте тяжелые вычисления или запросы в фильтре woocommerce_product_get_tax_class, чтобы не замедлять загрузку страниц.
  • Если нужна сложная логика (например, геолокация), реализуйте кэширование результатов с помощью транзиентов WordPress.
  • Регулярно обновляйте WooCommerce и плагины, чтобы избежать уязвимостей в расчетах налогов.
  • Для больших магазинов с множеством налоговых правил рассмотрите использование специализированных плагинов, например, Clearfy Pro, который оптимизирует работу сайта и может помочь с SEO и чисткой базы.

Сравнение способов реализации разных ставок НДС на один товар

МетодПреимуществаНедостатки
Классы налогов и вариацииСтандартный механизм WooCommerce, простота настройки, поддержка в админкеТребуется вариативный товар, не подходит для простых товаров с динамическими ставками
Фильтр woocommerce_product_get_tax_classГибкая кастомизация, подходит для простых товаров, возможность менять ставку динамическиТребуется программирование, может вызвать ошибки при неправильном коде
Плагины сторонних разработчиковМножество функций, поддержка различных сценариевДополнительные расходы, возможные конфликты, нагрузка на сайт
WooCommerce: как программно удалять товар из корзины по условию
24.05.2026
Как изменить URL автора в WordPress без плагинов
15.01.2026
Автоматическое удаление старого контента в WordPress
07.04.2026
Как отключить Emoji в WordPress для ускорения сайта
28.11.2025
WooCommerce: автоматическое изменение стоимости доставки при изменении веса товаров
07.05.2026