Как использовать фильтры WooCommerce для автоматического изменения стоимости товаров

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

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

Пошаговое решение: применение фильтра woocommerce_product_get_price

Самый надёжный способ изменить цену товара на лету без изменения базы — использовать фильтр woocommerce_product_get_price. Он вызывается при получении цены товара и позволяет вернуть изменённое значение.

Пример кода для изменения цены товара с определённым ID:

add_filter('woocommerce_product_get_price', 'custom_dynamic_price', 10, 2);
function custom_dynamic_price($price, $product) {
    // Меняем цену только для товара с ID 123
    if ($product->get_id() === 123) {
        // Задаём новую цену, например, скидку 20%
        $price = $price * 0.8;
    }
    return $price;
}

Можно расширить логику, например, добавить проверку роли пользователя:

add_filter('woocommerce_product_get_price', 'price_for_vip_users', 10, 2);
function price_for_vip_users($price, $product) {
    if (current_user_can('vip_customer')) {
        $price = $price * 0.9; // 10% скидка для VIP
    }
    return $price;
}

Изменение цены вариативных товаров

Для вариативных товаров фильтр сработает на каждом варианте — можно применять условия к вариациям по ID:

add_filter('woocommerce_product_get_price', 'custom_price_variations', 10, 2);
function custom_price_variations($price, $product) {
    if ($product->is_type('variation') && in_array($product->get_id(), [456,789])) {
        $price = $price - 100; // скидка 100 рублей
    }
    return $price;
}

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

  1. Очистите кэш сайта и браузера.
  2. Откройте страницу товара, для которого меняется цена, и проверьте отображаемую цену.
  3. Проверьте цену в корзине и на странице оформления заказа — она должна совпадать с изменённой.
  4. Если есть роль пользователя (например, VIP), войдите под этой ролью и убедитесь, что скидка применяется.

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

  • Цена не меняется на фронтенде: возможно, используется кэширование. Очистите кэш плагинов (WP Rocket, W3 Total Cache) и браузера.
  • Изменённая цена не учитывается в корзине: убедитесь, что используете фильтр woocommerce_product_get_price, а не устаревшие хуки. Также проверьте, что нет конфликтов с другими плагинами.
  • Цена ломает логику скидок и купонов: при сложных изменениях лучше использовать фильтр woocommerce_get_price и дополнительно проверять совместимость с другими хуками WooCommerce.
  • Изменение цены влияет на базу данных: не используйте прямое обновление поля _price в мета товара без необходимости — это может привести к рассинхронизации и ошибкам.

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

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

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

СпособПреимуществаНедостаткиКогда использовать
Фильтр woocommerce_product_get_priceДинамическая смена цены без записи в базу, совместимостьНе подходит для массовых изменений в базеСкидки по ролям, атрибутам, условиям
Обновление мета _price товараЦена меняется в базе, видна в админкеРиск рассинхронизации, сложность поддержкиСтатические изменения, миграции
Использование плагинов скидокУдобство, поддержка, GUIЗависимость от плагина, производительностьСтандартные скидки и акции
Как использовать REST API WordPress для получения пользовательских данных
01.01.2026
Автоматическое удаление старых отзывов в WordPress: как настроить и реализовать
03.04.2026
Как отфильтровать и удалить спам-комментарии по IP в WordPress
05.03.2026
Как создать автоматические отчёты в WordPress с помощью WP-Cron и REST API
16.01.2026
Автоматическое изменение цены товара WooCommerce по атрибуту
17.04.2026

Задать вопрос о вордпресс, получить ответ - это все можно сделать в нашем сообществе WP. Сайт в данный момент в разработке, изучите ссылки ниже: