WooCommerce: массовое обновление цен товаров через код

Когда нужно массово менять цены в WooCommerce

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

Диагностика: почему стандартные инструменты не всегда подходят

WooCommerce имеет встроенный импорт/экспорт и массовое редактирование через админку, но при большом ассортименте это неэффективно. Плюс, импорт/экспорт CSV требует дополнительной подготовки и не всегда удобен для динамических изменений (например, повышение цены на процент). Плагины массового редактирования часто платные или перегружают базу.

Поэтому разумно использовать кастомный PHP-код, который быстро и безопасно обновит цены через WP-CLI или подключенный скрипт.

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

1. Подготовка: резервное копирование и тестирование

Перед изменениями сделайте полную резервную копию базы данных и файлов сайта. Проверьте работу кода на тестовом сайте или локальной копии.

2. Код для массового увеличения цен на 10%

function wpkpi_bulk_update_prices_percentage($percent = 10, $category_slug = '') {
    $args = [
        'post_type' => 'product',
        'posts_per_page' => -1,
        'post_status' => 'publish',
    ];
    if ($category_slug) {
        $args['tax_query'] = [[
            'taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => $category_slug,
        ]];
    }

    $products = get_posts($args);
    foreach ($products as $product_post) {
        $product = wc_get_product($product_post->ID);
        if (!$product) continue;

        $regular_price = (float) $product->get_regular_price();
        if ($regular_price <= 0) continue;

        $new_price = $regular_price * (1 + $percent / 100);
        $new_price = round($new_price, 2);

        $product->set_regular_price($new_price);

        // Если есть скидочная цена - можно сбросить или тоже обновить
        $sale_price = $product->get_sale_price();
        if ($sale_price) {
            $product->set_sale_price(''); // сбрасываем скидку
        }

        $product->save();
    }
}

// Пример вызова: увеличить цены на 10% для всех товаров категории "odezhda"
wpkpi_bulk_update_prices_percentage(10, 'odezhda');

3. Запуск кода

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

if (defined('WP_CLI') && WP_CLI) {
    WP_CLI::add_command('wpkpi.update_prices', function($args, $assoc_args) {
        $percent = isset($assoc_args['percent']) ? (float) $assoc_args['percent'] : 10;
        $category = $assoc_args['category'] ?? '';
        wpkpi_bulk_update_prices_percentage($percent, $category);
        WP_CLI::success('Цены обновлены');
    });
}

Запуск через терминал: wp wpkpi.update_prices --percent=10 --category=odezhda

Как проверить, что цены обновились

  • Через админку WooCommerce откройте товары из нужной категории и проверьте цены.
  • В базе данных посмотрите таблицу wp_postmeta для мета ключей _regular_price и _sale_price.
  • Используйте WP-CLI для выборки: wp post meta get <product_id> _regular_price.

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

  • Код не обновляет цены: Проверьте, что wc_get_product() возвращает объект, а не null. Возможно, товар не опубликован или не является простым/варируемым продуктом.
  • Ошибка таймаута при большом количестве товаров: Используйте WP-CLI или разбивайте обновление на части с помощью пагинации.
  • Скидочная цена не сбрасывается: Явно очищайте значение скидочной цены (set_sale_price('')), иначе WooCommerce может показывать старую цену.
  • Изменения не отображаются на сайте: Очистите кэш плагинов и браузера.

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

  • Всегда делайте резервные копии базы перед массовыми изменениями.
  • Запускайте тяжелые операции через WP-CLI или отдельные скрипты, чтобы избежать таймаутов PHP и перегрузки сервера.
  • Используйте транзакции базы данных (если возможно) или логируйте изменения для отката.
  • После обновления цен сбрасывайте кэш WooCommerce и кеш страниц.

Сравнение вариантов массового обновления цен

МетодПреимуществаНедостатки
Встроенный массовый редактор WooCommerceПростота, нет кодаНе подходит для больших объемов, нет автоматизации
Импорт/экспорт CSVГибкость, можно подготовить данные в ExcelСложно для динамических изменений, требует подготовки
Плагины массового редактированияУдобство, интерфейсЧасто платные, нагрузка
Кастомный PHP-код (WP-CLI)Автоматизация, масштабируемость, точное управлениеТребует навыков программирования
Автоматическое удаление товаров WooCommerce со статусом "Черновик" старше 30 дней
11.05.2026
Как удалить или изменить параметры URL в WordPress без редиректа
03.02.2026
WooCommerce: автоматическое удаление заказов по истечении срока
14.05.2026
WooCommerce: отмена или возврат товара с помощью хуков и статусов заказов
18.04.2026
Как создать автоматический каталог картинок в WordPress
05.01.2026