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

Диагностика проблемы: почему ручное изменение цен неудобно

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

Автоматизация ценовых изменений с помощью кода позволяет быстро и безопасно вносить изменения, применять сложные условия и управлять акциями централизованно.

Как автоматически изменить цену товара по акции: настройка через код

Рассмотрим пример, когда нужно применить скидку 20% ко всем товарам из определённой категории. Для этого используем хук woocommerce_product_get_price и woocommerce_product_get_regular_price, чтобы динамически изменять цену при выводе.

Код для functions.php вашей темы или в кастомном плагине:

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

function custom_sale_price_for_category($price, $product) {
    if (is_admin()) return $price; // Не меняем в админке

    // Укажите slug категории для акции
    $sale_category_slug = 'aktsiya';

    if (has_term($sale_category_slug, 'product_cat', $product->get_id())) {
        $discount_percent = 20; // скидка 20%
        $new_price = $price * (1 - $discount_percent / 100);
        return round($new_price, 2);
    }

    return $price;
}

Этот код динамически уменьшает цену на 20% для товаров из категории "aktsiya" при выводе в магазине и на страницах товара. В админке цена остаётся без изменений.

Как адаптировать код под другие условия

  • Для скидки фиксированной суммы замените формулу на $new_price = max(0, $price - $fixed_discount);
  • Для нескольких категорий используйте массив и проверяйте has_term для каждого
  • Для ограничения по дате акции добавьте проверку текущей даты через current_time('timestamp')

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

Чтобы убедиться, что скидка применяется корректно:

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

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

  • Цены не меняются на фронтенде
    Проверьте, что код подключён и не возвращает цену в админке. Убедитесь, что slug категории указан верно и товар действительно относится к ней.
  • Скидка применяется в админке
    Добавьте условие if (is_admin()) return $price; в начале функции, чтобы не менять цены в панели управления.
  • Расхождение цен в разных местах сайта
    Возможно, другие плагины или темы кэшируют цены. Очистите кэш и проверьте шаблоны вывода.
  • Неправильное округление цен
    Используйте round($new_price, 2) для корректного отображения с двумя знаками после запятой.

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

  • Не изменяйте цену товара в базе данных — используйте динамическое изменение через фильтры, чтобы избежать проблем с учётом продаж и отчётностью.
  • Не добавляйте сложную логику и запросы в функцию фильтра, чтобы не замедлять загрузку страниц.
  • Тестируйте код на тестовом сайте перед применением на боевом.
  • Если нужно массово менять цены навсегда, используйте WP-CLI или SQL-запросы с бэкапом данных.

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

МетодПлюсыМинусыКомпромисс
Динамическое изменение через фильтрыЛегко внедрить, не трогает базу, гибкоТребует знания PHP, не сохраняется в базеОтлично для временных акций
Изменение цен через админку вручнуюПросто, не требует кодаДолго, риск ошибок, неудобно при большом каталогеПодходит для редких изменений
Массовое обновление через WP-CLI или SQLБыстро для большого количества товаровРиск потерять данные, требует резервного копированияЛучше для постоянных изменений
Как создать динамический вывод постов в WordPress
29.11.2025
Как использовать REST API для создания кастомных эндпоинтов в WordPress
06.12.2025
Как создать автоматические заголовки для постов в WordPress
18.01.2026
Как автоматизировать управление robots.txt в WordPress
26.03.2026
Как автоматизировать управление ролями пользователей в WordPress
08.01.2026