Автоматическое изменение стоимости товаров WooCommerce по категории

Диагностика задачи: зачем менять цену товаров по категории автоматически

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

Как реализовать автоматическое изменение цены по категории товаров

Использование фильтра woocommerce_product_get_price

Для динамического изменения цены используем хук woocommerce_product_get_price, который возвращает цену товара при вызове $product->get_price(). С помощью этого фильтра можно подменять цену без изменения данных в базе.

Пример кода для увеличения цены на 20% для категории с ID 15:

add_filter('woocommerce_product_get_price', 'change_price_by_category', 10, 2);
function change_price_by_category($price, $product) {
    if (has_term(15, 'product_cat', $product->get_id())) {
        $price = $price * 1.2; // Увеличение на 20%
    }
    return $price;
}

Изменение цены для вариативных товаров

Для вариативных товаров нужно также фильтровать цену вариаций:

add_filter('woocommerce_product_variation_get_price', 'change_price_by_category', 10, 2);
add_filter('woocommerce_product_variation_get_regular_price', 'change_price_by_category', 10, 2);
add_filter('woocommerce_product_variation_get_sale_price', 'change_price_by_category', 10, 2);

Добавьте эти фильтры, чтобы цена изменялась корректно во всех местах.

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

  • Перейдите на страницу товара из нужной категории — цена должна измениться на 20%.
  • Проверьте страницу архива категории — цены должны отображаться обновлёнными.
  • Добавьте товар в корзину — итоговая стоимость должна соответствовать изменённой цене.
  • Для вариативных товаров проверяйте цену каждой вариации.

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

  • Цена не меняется: Проверьте, что ID категории указан правильно и товар действительно относится к ней.
  • Цена меняется для всех товаров: Возможно, условие has_term() написано с ошибкой. Используйте отладку с error_log() для проверки.
  • Изменения не видны из-за кэша: Очистите кэш сайта и браузера, отключите кэширование на время тестов.
  • Неверные цены в корзине: Убедитесь, что все необходимые фильтры для вариаций подключены.

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

  • Используйте в условии has_term() ID или слаг категории — ID быстрее, но слаг удобнее читать.
  • Добавьте проверку is_admin() внутри функции, чтобы изменения не влияли на админку и не создавали лишнюю нагрузку:
if (is_admin()) {
    return $price;
}
  • Для больших магазинов с сотнями товаров лучше реализовать кеширование результатов проверки принадлежности к категории.
  • Избегайте изменения цены напрямую в базе, используйте фильтры для безопасности и простоты отката изменений.

Сравнение вариантов реализации изменения цены по категории

МетодПлюсыМинусы
Фильтр woocommerce_product_get_priceБыстрая реализация, не меняет базу, гибкоЦена изменяется только при выводе, нельзя использовать для сложных расчётов в админке
Изменение цены в базе (переопределение метаполей)Цена меняется для всех операций, включая админкуРиск ошибок, нужно ручное восстановление, сложнее отладка
Плагины скидок и динамических ценУдобно для пользователей без кодаНагрузка, не всегда гибко, платные решения
Как установить ограничения на регистрацию в WordPress по домену e-mail
30.01.2026
Как удалить варианты товаров WooCommerce при удалении атрибута
26.04.2026
Как удалить проблемы с вариантами товаров в WooCommerce: практическое руководство
23.04.2026
Как использовать WordPress REST API для создания кастомных эндпоинтов
19.01.2026
Как использовать методы для удаления вариативных товаров WooCommerce при удалении атрибута
09.06.2026

Задать вопрос о вордпресс, получить ответ - это все можно сделать в нашем сообществе WP. Сайт в данный момент в разработке, изучите ссылки ниже: