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

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

При работе с 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Очень быстроРиск повредить базу, сложная отладкаТолько при глубоком понимании базы данных
Как автоматически отключать неиспользуемые плагины WordPress для оптимизации сайта
10.03.2026
Как избежать повторов товаров и ошибок в WooCommerce: практическое руководство
25.05.2026
Как отключить Emoji в WordPress для ускорения сайта
18.03.2026
Как добавить иконки приложений в WordPress: руководство с примерами
20.05.2025
Автоматизация обновления контента в WordPress с WPRemark
24.03.2026