Диагностика проблемы: почему автоматизация обновления остатков и цен важна
При работе с WooCommerce и большим ассортиментом товаров ручное обновление остатков и цен — рутинная и ресурсоёмкая задача. Особенно критично, если поставщик присылает обновления в формате CSV, а количество товаров превышает сотни или тысячи.
Если вы не автоматизируете этот процесс, возможны следующие проблемы:
- Неверные цены на сайте;
- Отсутствие актуальных остатков — клиенты заказывают товары, которых нет;
- Ошибки при ручном вводе данных;
- Затраты времени на регулярное обновление.
Подготовка: требования и инструменты
Для автоматического обновления остатков и цен по CSV-файлу нам понадобится:
- Доступ к FTP или файловому менеджеру хостинга;
- Права администратора в WordPress;
- Плагин Clearfy Pro или альтернативный плагин импорта CSV (например, WP All Import, но в статье рассмотрим кодовое решение);
- CSV-файл с колонками: SKU, stock_quantity, regular_price.
Пошаговое решение: обновляем остатков и цены через cron и CSV
1. Формат CSV
Убедитесь, что CSV содержит минимум следующие колонки:
SKU;stock_quantity;regular_price
12345;10;990.00
23456;0;1200.50
...Разделитель — точка с запятой.
2. Загрузка CSV на сервер
Загрузите файл в директорию wp-content/uploads/ или в любое другое доступное место на сервере, например wp-content/uploads/updates/stock_prices.csv.
3. Код для импорта и обновления товаров
Добавьте следующий код в файл functions.php вашей дочерней темы или в отдельный плагин:
function wpdream_update_stock_and_price_from_csv() {
$csv_file = WP_CONTENT_DIR . '/uploads/updates/stock_prices.csv';
if ( ! file_exists( $csv_file ) ) {
error_log('CSV файл для обновления не найден');
return;
}
if ( ( $handle = fopen( $csv_file, 'r' ) ) !== false ) {
$header = fgetcsv( $handle, 1000, ';' );
$sku_index = array_search('SKU', $header);
$stock_index = array_search('stock_quantity', $header);
$price_index = array_search('regular_price', $header);
if ( $sku_index === false || $stock_index === false || $price_index === false ) {
error_log('Неверный формат CSV: отсутствуют обязательные колонки');
fclose( $handle );
return;
}
while ( ( $data = fgetcsv( $handle, 1000, ';' ) ) !== false ) {
$sku = trim( $data[ $sku_index ] );
$stock = intval( $data[ $stock_index ] );
$price = floatval( $data[ $price_index ] );
if ( empty( $sku ) ) continue;
$product_id = wc_get_product_id_by_sku( $sku );
if ( ! $product_id ) {
error_log('Товар с SKU ' . $sku . ' не найден');
continue;
}
$product = wc_get_product( $product_id );
if ( ! $product ) continue;
$product->set_stock_quantity( $stock );
$product->set_regular_price( $price );
$product->save();
}
fclose( $handle );
}
}
// Запускаем обновление по расписанию
if ( ! wp_next_scheduled( 'wpdream_schedule_update_stock_price' ) ) {
wp_schedule_event( time(), 'hourly', 'wpdream_schedule_update_stock_price' );
}
add_action( 'wpdream_schedule_update_stock_price', 'wpdream_update_stock_and_price_from_csv' );Данный код:
- Считывает CSV;
- Ищет продукт по SKU;
- Обновляет остаток и цену;
- Запускает задачу раз в час через wp-cron.
4. Тестирование
Для проверки создайте тестовый CSV с 2-3 товарами. Загрузите на сервер и вручную вызовите функцию через админ-панель или WP-CLI:
wp eval 'wpdream_update_stock_and_price_from_csv();'Проверьте, что цены и остатки обновились в карточках товаров.
Проверка результата после внедрения
Чтобы убедиться, что обновление прошло успешно:
- Проверьте логи ошибок (error_log) на наличие сообщений;
- Откройте страницу редактирования товара в админке и сравните цену и остаток с CSV;
- Используйте WP-CLI команду
wp wc product get <product_id> --field=regular_priceдля выборочной проверки; - Проверьте, что cron-задача запланирована:
wp cron event list.
Частые ошибки и как их исправить
- CSV не загружается или не найден: Проверьте путь к файлу. Лучше использовать полный путь PHP, как в примере.
- Отсутствие колонок SKU, stock_quantity, regular_price: Проверьте заголовок CSV, убедитесь в правильном формате и разделителе.
- Товары не обновляются, ошибка «Товар с SKU не найден»: Убедитесь, что SKU совпадает с тем, что в WooCommerce. SKU чувствительны к пробелам и регистру.
- Cron-задача не запускается: Проверьте, что wp-cron работает (редиректы, HTTP-запросы не блокируются). Можно запускать cron вручную через WP-CLI или внешним планировщиком.
Практические советы по безопасности и производительности
- Не храните CSV с конфиденциальными данными в публичной директории без защиты через .htaccess.
- Ограничьте права на выполнение скриптов, чтобы только администраторы могли менять код.
- При большом объёме данных разбивайте CSV на части, чтобы избежать превышения лимитов памяти и времени выполнения.
- Для ускорения работы и снижения нагрузки используйте пакетный импорт — например, обрабатывайте по 50 товаров за один запуск.
- Используйте транзиенты или кэш для хранения результатов импорта, чтобы не запускать обновление слишком часто.
Сравнение вариантов обновления остатков и цен
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Плагин WP All Import | Графический интерфейс, поддержка сложных CSV, регулярные обновления | Платный, нагрузка на сайт при большом импорте | Для крупных магазинов с частыми изменениями |
| Самописный скрипт (как в статье) | Легкий, бесплатный, гибкий под задачи | Требует навыков программирования, нет интерфейса | Для разработчиков и небольших магазинов |
| Импорт через SQL | Очень быстро | Риск повредить базу, сложная отладка | Только при глубоком понимании базы данных |