Автоматическое обновление остатков и цен товаров в WooCommerce с данными от поставщиков

Как понять, что автоматическое обновление остатков и цен необходимо именно вам

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

Признаки необходимости автоматизации:

  • Цены и остатки на сайте часто устаревают и приводят к недовольству клиентов.
  • Ручное обновление данных занимает много времени и приводит к ошибкам.
  • Поставщик предоставляет файлы с данными в формате CSV, XML или через API.

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

Часто встречающиеся проблемы при попытках автоматизировать обновление:

  • Некорректный парсинг файла поставщика из-за неправильной кодировки или формата.
  • Отсутствие привязки SKU или другого уникального идентификатора товара в WooCommerce и в файле поставщика.
  • Ошибки в коде, который изменяет цены и остатки, например, неправильное использование WooCommerce функций.
  • Неправильная настройка cron задач для регулярного запуска скрипта обновления.

Пошаговое решение: пример скрипта для автоматического обновления остатков и цен из CSV файла

В этом примере рассмотрим ситуацию, когда поставщик предоставляет CSV файл с колонками SKU, price и stock. Скрипт будет запускаться через WP-Cron раз в сутки.

1. Подготовка CSV файла

Убедитесь, что файл в кодировке UTF-8 без BOM, с разделителем запятая и первой строкой заголовков: SKU,price,stock.

2. Создаем функцию для чтения и обновления товаров

function wpengine_update_products_from_csv() {
    $csv_file = WP_CONTENT_DIR . '/uploads/supplier_data.csv';
    if (!file_exists($csv_file)) {
        error_log('CSV файл не найден: ' . $csv_file);
        return;
    }

    if (($handle = fopen($csv_file, 'r')) !== false) {
        $header = fgetcsv($handle, 1000, ',');
        while (($data = fgetcsv($handle, 1000, ',')) !== false) {
            $row = array_combine($header, $data);
            if (empty($row['SKU'])) continue;

            $product_id = wc_get_product_id_by_sku($row['SKU']);
            if (!$product_id) continue;

            $product = wc_get_product($product_id);
            if (!$product) continue;

            // Обновляем цену
            $price = floatval($row['price']);
            if ($price > 0) {
                $product->set_price($price);
                $product->set_regular_price($price);
            }

            // Обновляем остаток
            $stock = intval($row['stock']);
            $product->set_stock_quantity($stock);
            $product->set_stock_status($stock > 0 ? 'instock' : 'outofstock');
            $product->save();
        }
        fclose($handle);
    }
}

3. Настраиваем WP-Cron для ежедневного обновления

add_action('wpengine_daily_update', 'wpengine_update_products_from_csv');

if (!wp_next_scheduled('wpengine_daily_update')) {
    wp_schedule_event(time(), 'daily', 'wpengine_daily_update');
}

Добавьте этот код в файл вашей темы functions.php или в отдельный плагин.

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

  • Проверьте, что файл CSV загружен в указанную папку (wp-content/uploads/supplier_data.csv).
  • Запустите cron задачу вручную, чтобы проверить работу: do_action('wpengine_daily_update'); в консоли WP или через плагин WP Crontrol.
  • Проверьте в админке WooCommerce, что цены и остатки обновились по SKU из файла.
  • Включите логирование ошибок в wp-config.php для отладки: define('WP_DEBUG', true); define('WP_DEBUG_LOG', true);
  • Проверяйте файл wp-content/debug.log на предмет ошибок.

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

  • Ошибка: Товары не обновляются, хотя CSV файл загружен.
    Причина: Нет совпадения SKU в WooCommerce.
    Решение: Проверьте поля SKU в базе и файле, убедитесь, что они совпадают без лишних пробелов и в одинаковом регистре.
  • Ошибка: Скрипт не запускается по расписанию.
    Причина: WP-Cron не сработал из-за отсутствия трафика или неправильного расписания.
    Решение: Настройте системный планировщик (cron) или используйте плагин WP Crontrol для отладки.
  • Ошибка: Цены и остатки обновляются некорректно.
    Причина: Некорректное преобразование типов (строки в число).
    Решение: В коде используйте floatval() и intval(), проверяйте данные перед применением.
  • Ошибка: Скрипт вызывает замедление сайта.
    Причина: Большой файл и обновление при каждом заходе.
    Решение: Обязательно запускать обновление через WP-Cron, не при загрузке страниц.

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

  • Безопасность: CSV файл должен быть загружен в закрытую от прямого доступа папку, например, wp-content/uploads/protected, и доступ к нему должен быть ограничен через .htaccess.
  • Производительность: Для больших файлов разбивайте процесс обновления на части, используя опции WordPress для хранения прогресса и запускать обновление частями.
  • Резервное копирование: Перед массовым обновлением цен и остатков сделайте резервную копию базы данных.
  • Логирование: Добавьте логирование успешных обновлений и ошибок для мониторинга процесса.

Сравнение подходов: плагин vs собственный код

МетодПлюсыМинусыКомпромиссы
Готовые плагины (например, WP All Import)Простота настройки, поддержка разных форматов, регулярные обновленияПлатные версии, нагрузка, ограниченная гибкостьИдеально для большинства магазинов без кастомных требований
Собственный код (как в статье)Максимальная гибкость, бесплатность, полный контрольНеобходимы навыки программирования, поддержка на васЛучше для уникальных сценариев и интеграций
Как сделать автоматическое удаление старого и неиспользуемого кода в WordPress
16.04.2026
WooCommerce: решение проблемы не отображения атрибутов вариативных товаров
05.06.2026
Как отслеживать и отвечать на ошибки PHP в WordPress
06.12.2025
Автоматическое создание купонов в WooCommerce по условиям заказов
04.06.2026
Как защитить WordPress от Brute Force атак
30.03.2026