wpcontent.ru wordpress wpcontent.ru

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

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

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

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

Для динамического изменения цены товара применяются фильтры WooCommerce, которые отвечают за получение цены товара на фронтенде и в корзине:

  • woocommerce_product_get_price — цена товара для отображения;
  • woocommerce_product_get_sale_price — специальная цена (скидка);
  • woocommerce_product_get_regular_price — базовая цена без скидок;
  • woocommerce_before_calculate_totals — событие перед подсчетом итогов в корзине (для динамического изменения цен в корзине).

Пошаговое решение: пример кода для изменения цены при акции

Рассмотрим пример, как снизить цену всех товаров категории sale-category на 20%:

add_filter('woocommerce_product_get_price', 'custom_discount_price', 10, 2);
add_filter('woocommerce_product_get_sale_price', 'custom_discount_price', 10, 2);

function custom_discount_price($price, $product) {
    if (has_term('sale-category', 'product_cat', $product->get_id())) {
        $discounted_price = $price * 0.8; // скидка 20%
        return round($discounted_price, 2);
    }
    return $price;
}

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

add_action('woocommerce_before_calculate_totals', 'custom_cart_item_discount');
function custom_cart_item_discount($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;
    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        if (has_term('sale-category', 'product_cat', $product->get_id())) {
            $original_price = $product->get_regular_price();
            $discounted_price = $original_price * 0.8;
            $product->set_price(round($discounted_price, 2));
        }
    }
}

Как проверить, что скидка работает

  • Откройте страницу товара из категории sale-category. Цена должна отображаться с учетом скидки 20%.
  • Добавьте товар в корзину. В корзине и при оформлении заказа цена тоже должна быть снижена на 20%.
  • Очистите кеш сайта и браузера, если изменения не видны сразу.
  • Для проверки используйте режим инкогнито или другой браузер.

Частые ошибки при автоматическом изменении цен и их исправление

  • Скидка не применяется в корзине
    Причина: не добавлен обработчик woocommerce_before_calculate_totals или он написан с ошибками. Решение: добавьте обработчик и используйте $product->set_price() внутри цикла по товарам корзины.
  • Старая цена отображается на странице товара
    Причина: не подключены фильтры woocommerce_product_get_price и woocommerce_product_get_sale_price. Решение: добавьте эти фильтры для корректного отображения.
  • Скидка применяется ко всем товарам
    Причина: неверная проверка категории в has_term(). Решение: убедитесь, что название категории указано правильно, можно проверить через админку или функцию print_r(wp_get_post_terms($product_id, 'product_cat')).

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

  • Используйте кэширование при большом каталоге, но исключите страницы корзины и оформления заказа из кэша, иначе динамическая цена не обновится.
  • Проверяйте, что ваши хуки не конфликтуют с плагинами скидок и акций. В случае конфликтов лучше реализовать логику через один централизованный фильтр.
  • Не изменяйте цену товара напрямую в базе — используйте только хуки и методы API WooCommerce для динамического изменения.
  • Если скидки сложные — с разными условиями, рассмотрите использование плагина Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpcontent.ru&utm_medium=article&utm_campaign=woocommerce-avtomaticheskoe-izmenenie-tsen-pri-aktsiyah) для оптимизации и управления акциями.

Сравнение подходов: плагин vs код vs комбинация

ПодходПлюсыМинусыКогда использовать
Плагин скидок (например, WooCommerce Dynamic Pricing)Простота настройки, готовый UI, поддержка сложных правилНагрузка на сайт, может конфликтовать с другими плагинами, платныйБольшой каталог, сложные сценарии скидок
Код на хуках (как в статье)Легковесность, полный контроль, нет лишних зависимостейНужны навыки PHP, ограниченная функциональность, поддержка вручнуюНебольшие каталоги, простые скидки
КомбинацияИспользование кода для базовых скидок + плагинов для сложныхТребует тщательного тестирования, возможны конфликтыСредние и крупные проекты с частыми акциями
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее