Диагностика задачи: зачем менять цены и скидки при импорте?
При массовом импорте товаров в WooCommerce часто возникает необходимость автоматической корректировки цен и скидок. Например, вы получаете прайс-лист от поставщика, где цены нужно увеличить на определённый процент, добавить скидку или применить фиксированную наценку. Задача — сделать это программно во время импорта, чтобы не редактировать товары вручную.
Как реализовать автоматическое изменение цен при импорте CSV/XML
Использование встроенного хука WooCommerce для фильтрации данных при импорте
Если вы используете стандартный импорт WooCommerce или плагин, поддерживающий хуки, можно перехватить процесс импорта и изменить цену.
Пример кода для функции, которая увеличивает цену на 10% при импорте:
add_filter('woocommerce_product_import_pre_insert_product_object', 'custom_adjust_price_on_import', 10, 2);
function custom_adjust_price_on_import( $product, $data ) {
// Проверяем, есть ли цена
$price = $data['regular_price'] ?? $product->get_regular_price();
if ( $price ) {
$new_price = floatval($price) * 1.10; // +10%
$product->set_regular_price( round($new_price, 2) );
// Например, добавим скидку 5% от новой цены
$sale_price = $new_price * 0.95;
$product->set_sale_price( round($sale_price, 2) );
}
return $product;
}Этот код нужно добавить в файл functions.php вашей темы или в плагин функционала.
Пример изменения цены с учётом категории товара
Можно задать разные коэффициенты в зависимости от категории:
add_filter('woocommerce_product_import_pre_insert_product_object', 'adjust_price_by_category_on_import', 10, 2);
function adjust_price_by_category_on_import( $product, $data ) {
$categories = $data['categories'] ?? [];
$price = $data['regular_price'] ?? $product->get_regular_price();
if ( !$price ) return $product;
$coef = 1.0;
foreach ($categories as $cat) {
if ( strtolower($cat) === 'electronics' ) {
$coef = 1.15; // +15% для электроники
break;
} elseif ( strtolower($cat) === 'books' ) {
$coef = 0.9; // -10% для книг
break;
}
}
$new_price = floatval($price) * $coef;
$product->set_regular_price( round($new_price, 2) );
$product->set_sale_price(''); // Сброс скидки
return $product;
}Проверка результата после внедрения
- Импортируйте несколько товаров с разными ценами и категориями через ваш CSV/XML.
- Проверьте в админке WooCommerce, что цены изменились согласно логике.
- На витрине сайта убедитесь, что цена и скидка отображаются правильно.
- Используйте инструменты разработчика или отладчик, чтобы убедиться, что хук срабатывает.
Частые ошибки при автоматическом изменении цен
- Неправильный ключ массива $data. В разных импортах структура данных отличается, важно проверить, как именно передаются цены и категории.
- Неочищенные или нечисловые значения цены. Всегда приводите цены к float, иначе ошибки.
- Сброс скидок при установке цены. Если не сбрасывать
sale_priceпри измененииregular_price, могут возникнуть конфликты. - Отсутствие проверки категорий приводит к применению неправильных коэффициентов.
Практические советы по безопасности и производительности
- Добавляйте логи для отладки изменения цен, чтобы быстро выявлять ошибки.
- Используйте кеширование при больших массивах товаров — например, временно сохраняйте результаты обработки.
- Перед массовым импортом протестируйте на тестовой базе.
- Ограничьте права доступа к функциям импорта, чтобы исключить несанкционированные изменения цен.
Сравнение подходов к автоматическому изменению цен
| Метод | Плюсы | Минусы |
|---|---|---|
Хук woocommerce_product_import_pre_insert_product_object | Гибкое изменение цен, работает на этапе импорта, без сторонних плагинов | Требует навыков PHP, нужно учитывать структуру данных |
| Плагины для массового изменения цен (например, WooCommerce Bulk Editor) | Интуитивный интерфейс, подходит для постимпорта | Может быть медленнее, не интегрируется с импортом напрямую |
| Изменение CSV перед импортом (Excel, скрипты) | Простое решение без кода | Ручная работа, риски ошибок при больших объемах |