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

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

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

Как работает изменение цены через хуки WooCommerce

Основной механизм — фильтр woocommerce_get_price (и его вариации для разных цен: обычная, со скидкой, оптовая и т.д.). Подменяя возвращаемое значение, можно динамически менять цену товара до вывода на страницу и в корзину.

Какие хуки использовать для изменения цены

  • woocommerce_get_price — возвращает основную цену товара.
  • woocommerce_product_get_price — более новый фильтр с объектом продукта.
  • woocommerce_product_get_regular_price — для изменения регулярной цены.
  • woocommerce_product_get_sale_price — для цены со скидкой.

Пошаговое решение: пример автоматического снижения цены на 20% при активной акции

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

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

function custom_discounted_price($price, $product) {
    $current_date = current_time('Y-m-d');
    $sale_start = '2024-06-01';
    $sale_end = '2024-06-10';

    // Проверяем, что сегодня в период акции
    if ($current_date >= $sale_start && $current_date <= $sale_end) {
        // Применяем скидку 20%
        $new_price = $price * 0.8;
        // Возвращаем цену с округлением до 2 знаков
        return round($new_price, 2);
    }
    return $price;
}

Этот код динамически снижает цену товара на 20% в указанный период, не изменяя данные в базе.

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

  1. Откройте страницу товара в указанном периоде акции — цена должна отображаться со скидкой 20%.
  2. Добавьте товар в корзину — в корзине и на странице оплаты цена должна соответствовать новой.
  3. Выйдите из периода акции — цена должна вернуться к оригинальной.
  4. Проверьте совместимость с кешем сайта и плагинами кэширования, чтобы изменения отобразились сразу.

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

  • Цена не меняется: возможно, используется кэширование или другой фильтр переопределяет цену. Отключите кеширование и проверьте приоритет фильтра (поставьте 99).
  • Цены изменились, но не в корзине: WooCommerce может использовать другие хуки для корзины, например, woocommerce_cart_item_price. Необходимо синхронизировать все фильтры.
  • Ошибка с типом данных цены: всегда возвращайте число с плавающей точкой или строку с числом, чтобы избежать ошибок форматирования.
  • Конфликты с плагинами скидок: применяйте фильтр аккуратно и тестируйте совместимость.

Оптимизация и безопасность

  • Используйте регулярные проверки даты и условий акции, чтобы не замедлять сайт лишними запросами.
  • Не меняйте цену в базе данных напрямую — это может привести к рассинхронизации данных и проблемам с отчетами.
  • Для более сложных акций используйте кастомные поля товаров или опции, а не хардкод даты.

Дополнительный пример: применение скидки только на определённую категорию товаров

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

function category_discount_price($price, $product) {
    if (has_term('sale-category', 'product_cat', $product->get_id())) {
        return round($price * 0.9, 2); // скидка 10% для категории
    }
    return $price;
}

Такой подход позволяет гибко управлять скидками по категориям без изменения базы.

Таблица сравнения способов изменения цены

МетодПреимуществаНедостаткиПрименение
Фильтры WooCommerce (как в примерах)Динамическое изменение, не меняет базу, совместимостьМогут быть проблемы с кешем, требует полного охвата хуковАкции, временные скидки, маркетинговые кампании
Изменение цены в базе (update_post_meta)Постоянное изменение, работает сразу вездеРиск рассинхронизации данных, сложно откатитьПостоянные скидки или исправления
Плагины скидок WooCommerceГотовое решение, настройки через UIМожет быть тяжеловесным, не всегда гибкоСложные акции без кода

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
WooCommerce: решение проблемы со старыми заказами после обновления
16.05.2026
Как автоматизировать обновление transient в WordPress: практическое руководство
28.03.2026
Как использовать REST API в WordPress для создания плагинов
08.11.2025
Как создать автоматическое отправление email в WordPress с примерами кода
11.01.2026
Как убрать Redirect Loop в WordPress: практическое руководство
19.04.2026
×

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

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

пишет статьи

готовит SEO

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

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