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

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

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

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

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

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

Этот фильтр позволяет динамически изменить цену товара в процессе получения цены WooCommerce. Ниже — пример кода, который снижает цену на 10%, если в корзине больше 5 единиц товара.

add_filter('woocommerce_product_get_price', 'custom_dynamic_price', 10, 2);
function custom_dynamic_price($price, $product) {
    if ( ! is_admin() && is_user_logged_in() ) {
        $cart = WC()->cart;
        if ( ! $cart ) return $price;
        $cart_quantity = 0;
        foreach ( $cart->get_cart() as $cart_item ) {
            if ( $cart_item['product_id'] == $product->get_id() ) {
                $cart_quantity += $cart_item['quantity'];
            }
        }
        if ( $cart_quantity >= 5 ) {
            $price = $price * 0.9; // скидка 10%
        }
    }
    return $price;
}

Обработка цены для вариативных товаров

Для вариативных товаров следует аналогично использовать фильтр woocommerce_product_variation_get_price, иначе цены вариаций не изменятся.

add_filter('woocommerce_product_variation_get_price', 'custom_dynamic_price', 10, 2);

Проверка результата: как убедиться, что цены меняются

  • Добавьте в корзину 5 или более единиц одного товара и проверьте на странице корзины и оформления заказа, что цена изменилась.
  • Если у вас вариативные товары, проверьте изменение цены для выбранной вариации.
  • Для контроля можно временно добавить error_log('Цена изменена: ' . $price); внутрь функции для логирования в debug.log.

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

  • Цена не меняется на фронтенде — возможно, фильтр не применяется из-за кэширования. Очистите кэш и отключите плагины кэширования на время теста.
  • Цена меняется и в админке — добавьте проверку !is_admin() в фильтр, чтобы не влиять на админ панель.
  • Не учитывается количество в корзине — убедитесь, что корзина инициализирована и $cart->get_cart() возвращает содержимое.
  • Вариативные товары остаются без изменений — добавьте фильтр для вариаций woocommerce_product_variation_get_price.

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

  • Не делайте тяжелых операций внутри фильтра изменения цены, чтобы не замедлять загрузку страниц.
  • Используйте условные теги как is_admin(), is_cart(), is_checkout(), чтобы ограничить применение фильтра только там, где нужно.
  • Если условия сложные, рассмотрите кэширование результатов вычислений в сессии или transient API.
  • Проверяйте права пользователя, если цена меняется в зависимости от ролей, чтобы не допустить утечек информации или неправильного ценообразования.

Сравнение способов реализации автоматической смены цены в WooCommerce

МетодПлюсыМинусы
Фильтры woocommerce_product_get_price и woocommerce_product_variation_get_priceГибкость, точечное изменение, не требует плагиновНужно писать код, возможны ошибки, требует тестирования
Плагины скидок и динамического ценообразованияУдобный интерфейс, готовые решенияМогут замедлять сайт, не всегда подходят под конкретные задачи, часто платные
Использование правил купоновПростота использования, встроено в WooCommerceМенее гибко, не всегда подходит для сложных условий
Как добавить динамические фильтры в темы WordPress: практические решения
30.03.2026
WooCommerce: автоматическое удаление товаров без заказов через заданный период
26.04.2026
Автоматическое изменение robots.txt в WordPress: практические решения и примеры кода
11.04.2026
Как удалить закрепленные записи в WordPress: практические способы
07.02.2026
Успешное обновление WordPress без проблем с плагинами
20.01.2026