WooCommerce: автоматическое изменение цены товара с помощью кастомной функции

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

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

Ручное изменение цен неудобно и чревато ошибками. Автоматизация через код позволяет гибко и точно управлять стоимостью, не затрагивая данные товара напрямую — цена меняется на лету при отображении и добавлении в корзину.

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

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

Ваша функция должна принимать текущую цену и объект товара, а возвращать уже скорректированную цену.

Пример: увеличиваем цену на 10% для товаров из категории "Распродажа"

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

function custom_price_increase_for_sale_category($price, $product) {
    if (has_term('sale', 'product_cat', $product->get_id())) {
        $price = $price * 1.10; // увеличить цену на 10%
    }
    return $price;
}

Пошаговое решение: автоматизация изменения цены в WooCommerce

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

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

  • Откройте страницу товара из нужной категории — цена должна отображаться с учетом корректировки.
  • Добавьте товар в корзину — итоговая цена в корзине и на этапе оформления заказа должна совпадать с измененной.
  • Для контроля можно временно добавить error_log в функцию изменения цены и смотреть логи сервера.

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

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

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

  • Не храните изменённые цены в базе данных напрямую — используйте фильтры для динамического изменения на лету.
  • Минимизируйте сложные операции и запросы внутри функции изменения цены, чтобы не влиять на скорость загрузки страниц.
  • Проверяйте, что ID и таксономии существуют при вызове has_term, чтобы избежать ошибок PHP.
  • Для сложных условий используйте transient API для кеширования результатов проверки, если данные не меняются часто.

Сравнение вариантов реализации динамического изменения цены в WooCommerce

ВариантПреимуществаНедостатки
Использование фильтров woocommerce_product_get_priceГибко, не изменяет базу, прост в реализацииМожет конфликтовать с плагинами динамических цен
Плагин динамического ценообразованияГотовое решение с UI, много функцийПлатные, возможны конфликты, нагрузка на сайт
Изменение цены в базе данныхПростое и прямое изменениеОпасно для истории заказов, сложно откатить, влияет на SEO
Запрет доступа к страницам WooCommerce для неавторизованных пользователей
16.03.2026
Как удалить все посты в WordPress через WP-CLI: эффективное решение для очистки сайта
06.12.2025
Удаление товаров WooCommerce по дате и статусу через PHP
24.05.2026
Как автоматизировать управление скоростью загрузки в WordPress
24.01.2026
Как автоматически отключить плагины на отдельных страницах WordPress для оптимизации
26.04.2026