Когда нужно массово менять цены в 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) | Автоматизация, масштабируемость, точное управление | Требует навыков программирования |