WooCommerce: автоматическое изменение стоимости товаров при акциях без плагинов

|

Диагностика проблемы: почему цены не меняются автоматически при акциях

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

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

Пошаговое решение: создание автоматического изменения цен через хук WooCommerce

Реализуем логику автоматического изменения цены при акции программно — без плагинов. Для примера сделаем скидку 20% на все товары из определённой категории «sale» в заданный период.

1. Добавление фильтра для изменения цены товара

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

add_filter('woocommerce_product_get_price', 'custom_sale_price_dynamic', 10, 2);
add_filter('woocommerce_product_get_regular_price', 'custom_sale_price_dynamic', 10, 2);
add_filter('woocommerce_product_get_sale_price', 'custom_sale_price_dynamic', 10, 2);

function custom_sale_price_dynamic($price, $product) {
    // Проверяем наличие категории 'sale'
    if (has_term('sale', 'product_cat', $product->get_id())) {
        $current_date = current_time('Y-m-d');
        $start_date = '2024-07-01'; // дата начала акции
        $end_date = '2024-07-15';   // дата окончания акции
        
        if ($current_date >= $start_date && $current_date <= $end_date) {
            // Применяем скидку 20%
            $discounted_price = $price * 0.8;
            return round($discounted_price, 2);
        }
    }
    return $price;
}

2. Поддержка отображения скидок и цен в корзине

Чтобы корректно отображалась скидка в корзине и на страницах оформления заказа, добавим фильтр для цены в заказах:

add_action('woocommerce_before_calculate_totals', 'custom_dynamic_sale_price_cart', 10, 1);
function custom_dynamic_sale_price_cart($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;

    $current_date = current_time('Y-m-d');
    $start_date = '2024-07-01';
    $end_date = '2024-07-15';

    if ($current_date < $start_date || $current_date > $end_date) return;

    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        if (has_term('sale', 'product_cat', $product->get_id())) {
            $original_price = $product->get_price();
            $new_price = $original_price * 0.8;
            $product->set_price(round($new_price, 2));
        }
    }
}

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

Чтобы проверить, что скидка применяется корректно:

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

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

Сравнение вариантов реализации автоматической скидки

МетодПреимуществаНедостаткиКомпромисс
Код в functions.phpЛегковесно, без плагинов, гибкоТребует навыков, сложно масштабироватьХорошо для небольших магазинов и простых условий
Специализированные плагины (например, WooCommerce Dynamic Pricing)Много функций, удобный интерфейсДобавляют нагрузку, требуют лицензийЛучше для крупных проектов с частыми акциями
Ручное изменение цен в товарахПростое решение без кодаНе масштабируется, много ручной работыПодходит для редких акций и ограниченного числа товаров
Как автоматизировать удаление старых черновиков в WordPress без плагинов
20.02.2026
Как избежать проблем с дублированием артикулов (SKU) при массовом импорте товаров в WooCommerce
08.05.2026
WooCommerce: автоматическое отключение неактивных методов оплаты
12.05.2026
Как добавить обработку файлов в REST API WordPress с примерами кода
05.02.2026
WooCommerce: автоматическое изменение стоимости товаров при акциях без плагинов
08.06.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее