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

Диагностика задачи: зачем автоматизировать обновление товаров в WooCommerce через CSV

Часто интернет-магазины на WooCommerce получают прайс-листы и остатки товаров от поставщиков в формате CSV. Ручное обновление товаров — затратный и ошибкоопасный процесс. Задача — автоматизировать импорт, чтобы при загрузке CSV автоматически обновлялись цены и количество товаров, а новые позиции добавлялись без дублирования.

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

Пошаговое решение: как программно обновлять инвентарь и цены из CSV в WooCommerce

1. Подготовка CSV и загрузка файла

Сохраняйте CSV в UTF-8 и проверяйте разделители (запятые или точки с запятой). Для теста можно использовать минимальный файл с 3 колонками: SKU, price, stock.

2. Парсинг CSV и сопоставление товаров

Используем стандартные функции PHP для чтения CSV и WP_Query для поиска товаров по SKU.

function wc_update_products_from_csv($csv_path) {
    if (!file_exists($csv_path)) {
        return 'Файл не найден';
    }
    if (($handle = fopen($csv_path, 'r')) === false) {
        return 'Не удалось открыть файл';
    }
    $header = fgetcsv($handle);
    $updated = 0;
    while (($row = fgetcsv($handle)) !== false) {
        $data = array_combine($header, $row);
        if (empty($data['SKU'])) {
            continue; // Пропускаем строки без SKU
        }
        $product_id = wc_get_product_id_by_sku($data['SKU']);
        if (!$product_id) {
            // Можно добавить создание товара здесь
            continue;
        }
        $product = wc_get_product($product_id);
        // Обновим цену
        if (isset($data['price'])) {
            $product->set_regular_price($data['price']);
        }
        // Обновим количество
        if (isset($data['stock'])) {
            $product->set_stock_quantity($data['stock']);
            $product->set_manage_stock(true);
        }
        $product->save();
        $updated++;
    }
    fclose($handle);
    return "Обновлено товаров: $updated";
}

// Функция для поиска ID продукта по SKU
function wc_get_product_id_by_sku($sku) {
    global $wpdb;
    return $wpdb->get_var($wpdb->prepare(
        "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_sku' AND meta_value=%s LIMIT 1",
        $sku
    ));
}

3. Запуск скрипта и интеграция с админкой

Можно добавить административную страницу с формой загрузки CSV и запуском импорта через AJAX или напрямую из админки. Для теста вызывайте функцию с абсолютным путем к файлу.

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

1. Проверьте логи ошибок PHP — не должно быть предупреждений.

2. Зайдите в карточки товаров, которые были в CSV, и убедитесь, что цены и остатки обновились.

3. Если использовали кэширование WooCommerce или плагинов, очистите кэш.

4. Для отладки можно добавить вывод количества обновленных товаров и ошибок в лог.

Частые ошибки и способы их исправления

  • Проблемы с кодировкой CSV: используйте UTF-8 без BOM, иначе могут быть ошибки при чтении.
  • Не найден SKU: убедитесь, что SKU в CSV и в товарах совпадают по регистру и формату.
  • Права доступа к файлу: файл CSV должен быть доступен для чтения PHP-скриптом.
  • Не обновляются данные: проверьте наличие вызова $product->save(); после изменения свойств.
  • Создание новых товаров: если требуется, добавьте логику создания постов типа product, иначе пропускаются.

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

  • Загружайте CSV только с админки, ограничьте доступ по ролям.
  • Перед обработкой делайте копию базы или экспорт товаров для отката.
  • Для больших CSV обрабатывайте файл по частям (batch processing), чтобы избежать таймаутов и превышения памяти.
  • Отключайте кэширование на время импорта, чтобы изменения сразу отображались.
  • Используйте транзакции базы данных или WP-CLI для надежности при массовом обновлении.

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

МетодПлюсыМинусы
Плагин импорта CSV (например, WP All Import)Простота настройки, визуальный интерфейс, поддержка сложных сценариевПлатные версии, нагрузка на сайт, ограниченная гибкость в кастомных задачах
Собственный кодТочная настройка под бизнес-процесс, легковесность, контроль над логикойТребует навыков PHP, поддержка и доработка своими силами
Как удалить или скрыть страницы от индексации поисковыми системами в WordPress
28.03.2026
Автоматизация создания копий безопасности WordPress: практические решения от WP-Team
29.11.2025
WooCommerce: как изменить статус заказа через хуки и проверить работу
01.05.2026
Как автоматизировать сбор и отчет по аналитике в WordPress
24.02.2026
Оптимизация загрузки изображений в WordPress для ускорения сайта
06.11.2025