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

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

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

Типичная задача: при добавлении товара автоматически назначать нужный налоговый класс в зависимости от категории или пользовательского поля, а также правильно рассчитывать итоговую сумму.

Диагностика текущей конфигурации НДС в WooCommerce

Для начала проверьте, как настроены налоговые классы и ставки в WooCommerce:

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

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

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

Самый простой способ — назначать соответствующий налоговый класс автоматически при сохранении товара или при добавлении товара в корзину.

1. Создание пользовательского кода для назначения налогового класса при сохранении товара

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

add_action('save_post_product', 'set_tax_class_by_category', 20, 3);function set_tax_class_by_category($post_id, $post, $update) {    // Проверяем, что это продукт и что не автосохранение    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return;    if ($post->post_type !== 'product') return;    // Получаем категории товара    $terms = wp_get_post_terms($post_id, 'product_cat', array('fields' => 'slugs'));    if (is_wp_error($terms) || empty($terms)) return;    $tax_class = '';    // Пример: для категории 'food' применяем пониженный НДС    if (in_array('food', $terms)) {        $tax_class = 'reduced-rate'; // название класса, как в настройках WooCommerce    } else {        $tax_class = ''; // стандартный налоговый класс    }    // Обновляем мета ключ tax_class    update_post_meta($post_id, '_tax_class', $tax_class);}

В этом примере для товаров из категории food назначается налоговый класс reduced-rate. Для остальных товаров — стандартный (пустая строка).

2. Обеспечение правильного расчета в корзине и на странице оформления заказа

WooCommerce автоматически использует налоговый класс товара при расчете налогов, если он корректно задан. Проверьте, что расчет работает, добавив товар из разных категорий в корзину.

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

  • Перейдите в админку и откройте любой продукт из категории food. Убедитесь, что у него в мета-поле tax_class стоит reduced-rate.
  • Добавьте этот товар в корзину и перейдите к оформлению заказа.
  • На странице корзины и оформления заказа проверьте, что сумма НДС соответствует пониженной ставке.
  • Повторите для товара из другой категории — там должна применяться стандартная ставка.

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

  • Налоговый класс не назначается или не сохраняется. Проверьте, что вы используете правильный хук save_post_product и что мета поле _tax_class обновляется. Не используйте save_post без уточнения типа поста.
  • Ставка НДС не меняется в корзине. Убедитесь, что налоговые классы и ставки созданы в WooCommerce, а название класса в коде совпадает с названием в настройках.
  • Не учитываются вариации товаров. Для вариативных товаров нужно дополнительно прописывать обработку вариаций, т.к. у них свои мета-поля.

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

  • Код лучше размещать в кастомном плагине, чтобы не потерять при смене темы.
  • Используйте проверку DOING_AUTOSAVE и права пользователя, чтобы не выполнять код при автосохранениях.
  • Если много товаров, автоматизация через крон или массовое обновление через WP CLI будет эффективнее.

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

МетодПлюсыМинусыПример
Ручное назначение налогового классаПростота, контрольТрудоемко на больших каталогахРедактирование в админке товара
Автоматическое назначение по категории (код)Автоматизация, масштабируемостьТребует поддержки кодаКод из статьи
Использование плагина (например, WooCommerce Tax Manager)Графический интерфейс, расширенные настройкиНагрузка, цена, возможные конфликтыПлагин в репозитории WooCommerce
Как настроить временный редирект в WordPress с помощью кода
07.01.2026
Как добавить автоматический режим работы для плагина WordPress
25.01.2026
Как добавить автоматическое сохранение в редактор Gutenberg в WordPress
10.11.2025
Как создать автоматический отзыв с подтверждением в WordPress
19.03.2026
Динамические опыты пользователя в WordPress с плагином WPRemark
05.02.2026