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

|

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

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

Если не использовать плагины, можно добиться этой задачи за счёт кастомного PHP-кода в functions.php или собственном плагине. Это поможет избежать избыточного функционала, ускорить сайт и сохранить контроль над логикой скидок.

Как WooCommerce рассчитывает цены и где внедрять изменения

WooCommerce использует класс WC_Product, который содержит методы get_price(), get_regular_price(), get_sale_price(). На фронтенде вывод цены берётся через фильтр woocommerce_get_price и woocommerce_product_get_price. Для изменения цен в реальном времени нужно использовать эти фильтры.

Основные хуки для изменения цены товара

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

Пошаговое решение: пример кода для автоматической 10% скидки на категорию товаров

Пример, как применить скидку 10% на все товары из категории с таксономией 'category' и slug 'sale':

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

function custom_dynamic_discount_price($price, $product) {
    // Проверяем, входит ли товар в категорию 'sale'
    if ( has_term('sale', 'product_cat', $product->get_id()) ) {
        $discount = 0.10; // 10% скидка
        $new_price = $price * (1 - $discount);
        // Округляем до 2 знаков
        return round($new_price, 2);
    }
    return $price;
}

Этот код автоматически уменьшит цену для всех товаров в категории 'sale' на 10%. Цена будет корректно отображаться во всех местах.

Как добавить условие действия скидки по датам акции

Если нужно активировать скидку только в определённый период, добавим проверку даты:

function custom_dynamic_discount_price($price, $product) {
    $start_date = strtotime('2024-01-01');
    $end_date = strtotime('2024-01-10');
    $current_date = current_time('timestamp');
    if ( $current_date >= $start_date && $current_date <= $end_date ) {
        if ( has_term('sale', 'product_cat', $product->get_id()) ) {
            $discount = 0.10;
            $new_price = $price * (1 - $discount);
            return round($new_price, 2);
        }
    }
    return $price;
}

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

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

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

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

ВариантПреимуществаНедостаткиКомпромисс
Код в functions.phpКонтроль, нет плагинов, легковесноТребуется навыки, ограниченная гибкостьПодходит для простых скидок и разработчиков
Плагины акций (например, WooCommerce Dynamic Pricing)Богатый функционал, GUI, гибкостьПлагины нагружают сайт, возможны конфликтыЛучше для сложных маркетинговых схем
Использование кастомных полей и cron для массовых измененийАвтоматизация, масштабируемостьСложность настройки, требует поддержкиДля больших магазинов с частыми акциями
Как сделать автоматическое удаление старых мета данных в WordPress
11.04.2026
Как использовать AJAX в WordPress для обновления контента без перезагрузки страницы
05.12.2025
Как добавить автоматическое удаление старого контента в WordPress
14.02.2026
Как избежать проблем при масштабном экспорте и импорте продуктов в WooCommerce
17.04.2026
Как добавить обработку файлов в REST API WordPress с примерами кода
05.02.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше