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

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

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

В таких случаях лучше всего использовать возможности WordPress — хуки (actions и filters) для программного изменения цены на лету, без изменения данных в базе.

Какие хуки в WooCommerce отвечают за цену товара

Для изменения цены перед выводом на страницу или в корзину используется фильтр woocommerce_get_price или woocommerce_product_get_price (для отдельных продуктов). Также часто применяют woocommerce_product_get_regular_price и woocommerce_product_get_sale_price для более тонкой настройки.

Для изменения цены в корзине и на этапе оформления заказа применяется хук woocommerce_before_calculate_totals.

Пример изменения цены товара для всех пользователей

add_filter('woocommerce_product_get_price', 'change_price_for_all_products', 10, 2);
function change_price_for_all_products($price, $product) {
    // Увеличиваем цену на 10%
    return $price * 1.10;
}

Изменение цены в корзине с учётом скидки для конкретного пользователя

add_action('woocommerce_before_calculate_totals', 'apply_custom_discount_for_logged_in_user');
function apply_custom_discount_for_logged_in_user($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;
    if (is_user_logged_in()) {
        foreach ($cart->get_cart() as $cart_item) {
            $original_price = $cart_item['data']->get_price();
            $discounted_price = $original_price * 0.9; // скидка 10%
            $cart_item['data']->set_price($discounted_price);
        }
    }
}

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

  1. Откройте файл functions.php вашей дочерней темы или создайте плагин для кастомного кода.
  2. Добавьте фильтр woocommerce_product_get_price для изменения отображаемой цены товаров.
  3. При необходимости добавьте действие woocommerce_before_calculate_totals для изменения цены в корзине, чтобы скидка применялась корректно при оформлении заказа.
  4. Протестируйте изменения на странице товара и в корзине с разными пользователями.

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

  • Откройте страницу товара и убедитесь, что цена изменилась согласно логике в фильтре.
  • Добавьте товар в корзину, перейдите в корзину и убедитесь, что цена там совпадает с изменённой.
  • Если применяете скидку только для залогиненных пользователей, проверьте цену в корзине под разными аккаунтами и в режиме гостя.

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

  • Изменение цены не отображается на странице товара: Проверьте, что используете правильный фильтр (woocommerce_product_get_price или woocommerce_get_price) и приоритет 10 или выше.
  • Цена в корзине не меняется: Не забывайте использовать woocommerce_before_calculate_totals и вызывать $cart_item['data']->set_price() для обновления цены в корзине.
  • Изменения влияют на базу данных: При использовании этих хуков изменения не сохраняются в базе, только выводятся динамически. Если у вас меняется цена в базе, проверьте, нет ли другого кода, который сохраняет новые значения.
  • Конфликты с кешированием: Используйте кеширование с осторожностью, чтобы динамические цены не кэшировались и не отображались некорректно.

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

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

Сравнение способов изменения цены в WooCommerce

СпособОписаниеПлюсыМинусы
Хуки (filters/actions)Изменение цены на лету при выводе и в корзинеГибко, не меняет базу, легко откатитьМожет конфликтовать с кешем, требует программирования
Плагины скидокИспользование сторонних плагинов для управления скидкамиУдобно для пользователей без кодаМожет быть тяжеловесным, не всегда гибко
Изменение цены в базеПрямое обновление цены товара в базе данныхПросто для постоянных измененийМенее гибко, риск ошибок, требует ручного контроля

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

⭐⭐⭐⭐⭐
Как создать динамическую таблицу в WordPress с помощью шорткода
26.11.2025
Как избежать проблем с совместимостью WooCommerce и кастомных тем WordPress
02.06.2026
Как автоматически отключать поддержку Gutenberg в WordPress
28.03.2026
Как удалить неиспользуемые шорткоды в WordPress: эффективные методы и примеры кода
18.02.2026
Как создать настройку для кастомизации заголовков в WordPress через панель администратора
18.12.2025
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее