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

|

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

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

Как проверить, что цена не меняется автоматически?

Пошаговое решение: автоматическое изменение цены товара через фильтр WooCommerce

Реализуем динамическое изменение цены товара при определённых условиях (например, в период акции) через хук woocommerce_get_price. Этот фильтр позволяет программно переопределять цену товара на фронтенде без изменения данных в базе.

Пример кода для functions.php вашей темы или плагина:

add_filter('woocommerce_get_price', 'custom_dynamic_sale_price', 10, 2);
function custom_dynamic_sale_price($price, $product) {
    // Устанавливаем даты акции
    $start_date = strtotime('2024-07-01 00:00:00');
    $end_date = strtotime('2024-07-10 23:59:59');
    $now = current_time('timestamp');

    // Проверяем, что сейчас период акции
    if ($now >= $start_date && $now <= $end_date) {
        // Пример: скидка 20% для категории 'sale-products'
        if (has_term('sale-products', 'product_cat', $product->get_id())) {
            $new_price = $price * 0.8; // 20% скидка
            return round($new_price, 2);
        }
    }
    return $price;
}

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

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

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

Обработка цены в корзине и заказах

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

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

    $start_date = strtotime('2024-07-01 00:00:00');
    $end_date = strtotime('2024-07-10 23:59:59');
    $now = current_time('timestamp');

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

    foreach ($cart->get_cart() as $cart_item) {
        $product = $cart_item['data'];
        if (has_term('sale-products', 'product_cat', $product->get_id())) {
            $original_price = $product->get_regular_price();
            $discounted_price = $original_price * 0.8; // 20% скидка
            $product->set_price(round($discounted_price, 2));
        }
    }
}

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

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

МетодПлюсыМинусыКогда использовать
Плагины для акцийГотовые функции, удобный интерфейсНагрузка, конфликты, стоимостьСложные акции, не хотите писать код
Фильтр woocommerce_get_price + обработка корзиныЛегковесно, гибко, без изменения базыТребует навыков PHP, не подходит для сложных скидокПростые временные скидки, кастомизация
Изменение цен в базе данныхПостоянные изменения, простая логикаРиск ошибок, сложность откатаДолгосрочные изменения, если нужны постоянные цены
Как создать фильтр по авторам в WordPress с поддержкой AJAX
31.03.2026
Создать автоматические отчёты в WordPress с помощью Expert Review
01.02.2026
Как создать автоматические решения для очистки базы данных WordPress
10.01.2026
Как использовать REST API в WordPress для создания простого плагина
15.11.2025
Как сделать автоматическое удаление старых мета данных в WordPress
11.04.2026
×
WPShop
партнерка без «но»!

До 3225₽ за каждую продажу

Подключиться к игре