Как использовать фильтры WooCommerce для автоматического изменения стоимости товаров

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

В WooCommerce часто возникает необходимость менять цену товара динамически — например, для предоставления скидок по определённым атрибутам, изменения цены в зависимости от пользователя, количества или других условий. Часто решение через стандартные купоны или скидки неудобно или слишком ограничено.

Если вы хотите реализовать автоматическую корректировку цены без вмешательства пользователя, то фильтры WooCommerce — ваш инструмент.

Основные фильтры для изменения цены в WooCommerce

В WooCommerce для динамического изменения цены товаров используют фильтры:

  • woocommerce_product_get_price — изменяет цену товара в целом;
  • woocommerce_product_get_regular_price — влияет на обычную цену товара;
  • woocommerce_product_get_sale_price — влияет на цену со скидкой;
  • woocommerce_cart_item_price — изменяет вывод цены в корзине;
  • woocommerce_before_calculate_totals — позволяет менять цену в корзине до подсчёта итогов.

В чём разница между фильтрами?

Для простого изменения цены на фронтенде достаточно первых трёх фильтров. Однако для корректного учёта цены в корзине и при оформлении заказа нужно использовать woocommerce_before_calculate_totals, иначе итоговая сумма будет неверной.

Пошаговое решение: пример автоматического изменения цены по атрибуту

Допустим, у вас есть атрибут color, и вы хотите автоматически давать скидку 10% на товары с цветом красный.

Шаг 1. Подключение фильтра для изменения цены товара

add_filter('woocommerce_product_get_price', 'custom_price_by_color', 10, 2);
add_filter('woocommerce_product_get_regular_price', 'custom_price_by_color', 10, 2);

function custom_price_by_color($price, $product) {
    if (!$product instanceof WC_Product) {
        return $price;
    }

    $color_terms = wp_get_post_terms($product->get_id(), 'pa_color');
    if (!empty($color_terms)) {
        foreach ($color_terms as $term) {
            if ($term->slug === 'krasnyj') {
                $price = $price * 0.9; // скидка 10%
                break;
            }
        }
    }
    return $price;
}

Шаг 2. Корректировка цены в корзине

Чтобы цена в корзине считалась правильно, используем woocommerce_before_calculate_totals:

add_action('woocommerce_before_calculate_totals', 'custom_cart_price_adjustment', 20, 1);

function custom_cart_price_adjustment($cart) {
    if (is_admin() && !defined('DOING_AJAX')) {
        return;
    }

    foreach ($cart->get_cart() as $cart_item) {
        $product = $cart_item['data'];
        $color_terms = wp_get_post_terms($product->get_id(), 'pa_color');
        if (!empty($color_terms)) {
            foreach ($color_terms as $term) {
                if ($term->slug === 'krasnyj') {
                    $new_price = $product->get_price() * 0.9;
                    $product->set_price($new_price);
                    break;
                }
            }
        }
    }
}

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

  • На странице товара убедитесь, что цена изменилась на 10% меньше для товаров с атрибутом color: красный.
  • Добавьте такой товар в корзину и проверьте, что цена в корзине и итоговая сумма отражают скидку.
  • Создайте заказ и проверьте цену в админке WooCommerce.

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

  • Цена не меняется в корзине — забыли использовать woocommerce_before_calculate_totals или неправильно изменяете цену у объекта товара.
  • Неверное отображение цены на странице товара — кеширование или кэш плагинов мешает обновлению, очистите кеш.
  • Фильтр не срабатывает для вариативных товаров — нужно проверить цену варианта (WC_Product_Variation), а не родителя, и правильно получить атрибуты варианта.
  • Изменения влияют на админку — добавьте проверку is_admin() и DOING_AJAX, чтобы не менять цену в админке.

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

  • Не используйте тяжелые запросы прямо в фильтрах цены — кешируйте результаты, если атрибуты или условия сложные.
  • Избегайте глобального изменения цены без условий, чтобы не сломать расчёты WooCommerce.
  • Проверяйте совместимость с плагинами кеширования и оптимизации, например, Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpcommunity.ru&utm_medium=article&utm_campaign=kak-ispolzovat-filtery-woocommerce-dlya-avtomaticheskogo-izmeneniya-stoimosti-tovarov) для очистки лишних дублей и кешей.
  • Используйте дочернюю тему или собственный плагин для добавления кода, чтобы не потерять изменения при обновлении.

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

КритерийПлагин для изменения ценыКастомный код (фильтры WooCommerce)
ГибкостьОграничена настройками плагинаМаксимальная, можно учесть любые условия
ПроизводительностьЗависит от реализации плагинаОптимально при правильном коде и кешировании
УправлениеПроще для неразработчиковТребует знаний PHP и WooCommerce API
ПоддержкаЗависит от автора плагинаПод вашим контролем

Вывод: для специфичных задач и оптимальной работы лучше использовать кастомные фильтры, особенно если вы разработчик.

Как использовать REST API WordPress для получения пользовательских данных
01.01.2026
Как удалить пустые категории в WordPress: удобный способ и автоматизация
19.02.2026
Как установить ограничение на регистрацию в WordPress по домену e-mail
20.03.2026
Как создать динамические шаблоны в WordPress на основе AJAX
22.12.2025
Как использовать фильтры WooCommerce для автоматического изменения стоимости товаров
31.05.2026

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