Как создать автоматический импорт продуктов из CSV в WooCommerce

Автоматизация импорта товаров в WooCommerce — частая задача для владельцев интернет-магазинов, особенно если ассортимент регулярно обновляется или поступает от поставщиков в формате CSV. В этой статье подробно разберем, как создать собственный механизм автоматического импорта продуктов из CSV файла в WooCommerce, используя PHP-код и популярные плагины, а также рассмотрим примеры для расширения функциональности.

Почему автоматический импорт продуктов важен для WooCommerce

Ручной ввод товаров в WooCommerce занимает много времени и подвержен ошибкам. Автоматизация позволяет:

  • Экономить время на загрузке и обновлении каталога;
  • Минимизировать ошибки при вводе данных;
  • Синхронизировать ассортимент с поставщиками или внешними системами;
  • Обеспечить регулярное обновление цен, остатков и описаний.

Для этого можно использовать готовые решения, например, плагин ABC Pagination с расширениями для импорта, но мы посмотрим, как сделать базовый импорт самостоятельно с возможностью расширения.

Использование плагинов для импорта CSV в WooCommerce

Плагин WP All Import

Один из самых популярных и мощных плагинов — WP All Import. Он поддерживает импорт любых типов записей, в том числе товаров WooCommerce, и умеет обрабатывать сложные CSV и XML файлы.

Преимущества WP All Import:

  • Простой интерфейс для настройки сопоставления колонок CSV с полями WooCommerce;
  • Поддержка обновления существующих товаров по ID или SKU;
  • Возможность автоматического запуска импорта по расписанию;
  • Поддержка пользовательских полей и атрибутов.

Однако у него есть платные версии для WooCommerce, и иногда хочется более кастомного решения.

Плагин Product CSV Import Suite

Официальный плагин WooCommerce — Product CSV Import Suite — также позволяет импортировать и обновлять товары, вариации и атрибуты через CSV. Он интегрируется в стандартный импорт WooCommerce.

Но этот плагин не автоматизирует процесс по расписанию, и нужна дополнительная настройка cron для регулярного импорта.

Создаем собственный скрипт автоматического импорта CSV в WooCommerce

Если хочется гибкости и полной автоматизации, можно написать собственный PHP-скрипт, который будет загружать CSV, парсить его и создавать/обновлять товары. Рассмотрим пример с использованием стандартных функций WooCommerce и WordPress.

Основные шаги скрипта

  1. Загрузка CSV файла (например, с FTP или через URL);
  2. Парсинг CSV с помощью функции fgetcsv();
  3. Поиск товара по SKU или другому уникальному идентификатору;
  4. Создание нового товара или обновление существующего;
  5. Заполнение основных полей: название, описание, цена, артикул, категории;
  6. Обработка изображений и атрибутов;
  7. Логирование результатов и ошибок.

Пример кода для импорта товаров из CSV

function wplab_import_products_from_csv($csv_file_path) {
    if (!file_exists($csv_file_path)) {
        error_log('WPLab Import: CSV файл не найден');
        return;
    }

    $handle = fopen($csv_file_path, 'r');
    if (!$handle) {
        error_log('WPLab Import: не удалось открыть CSV');
        return;
    }

    $header = fgetcsv($handle, 0, ','); // Читаем заголовок
    if (!$header) {
        error_log('WPLab Import: пустой CSV');
        fclose($handle);
        return;
    }

    while (($row = fgetcsv($handle, 0, ',')) !== false) {
        $data = array_combine($header, $row);
        if (!$data) continue;

        $sku = sanitize_text_field($data['sku']);
        if (empty($sku)) continue;

        // Ищем продукт по SKU
        $existing_product_id = wplab_find_product_by_sku($sku);

        if ($existing_product_id) {
            $product = wc_get_product($existing_product_id);
        } else {
            $product = new WC_Product_Simple();
        }

        $product->set_name(sanitize_text_field($data['name']));
        $product->set_regular_price(floatval($data['price']));
        $product->set_sku($sku);
        $product->set_description(sanitize_textarea_field($data['description']));

        // Категории
        if (!empty($data['categories'])) {
            $categories = array_map('trim', explode('|', $data['categories']));
            $cat_ids = array();
            foreach ($categories as $cat_name) {
                $cat_term = get_term_by('name', $cat_name, 'product_cat');
                if (!$cat_term) {
                    $cat_term = wp_insert_term($cat_name, 'product_cat');
                }
                if (!is_wp_error($cat_term)) {
                    $cat_ids[] = is_array($cat_term) ? $cat_term['term_id'] : $cat_term->term_id;
                }
            }
            $product->set_category_ids($cat_ids);
        }

        $product->save();
    }

    fclose($handle);
}

// Функция поиска продукта по SKU
function wplab_find_product_by_sku($sku) {
    $args = array(
        'post_type' => 'product',
        'meta_query' => array(
            array(
                'key' => '_sku',
                'value' => $sku,
                'compare' => '='
            )
        ),
        'fields' => 'ids',
        'posts_per_page' => 1
    );
    $query = new WP_Query($args);
    if (!empty($query->posts)) {
        return $query->posts[0];
    }
    return 0;
}

В этом примере:

  • CSV файл должен содержать колонки sku, name, price, description, categories (через | для нескольких категорий);
  • Если продукт с таким SKU есть, он обновляется, иначе создается новый;
  • Категории создаются автоматически, если их нет;
  • Можно добавить обработку изображений, атрибутов и вариаций.

Автоматизация запуска импорта через WP Cron

Чтобы импорт запускался автоматически, например, раз в сутки, используйте WP Cron:

add_action('wplab_daily_product_import', 'wplab_run_daily_import');
function wplab_run_daily_import() {
    $csv_file = WP_CONTENT_DIR . '/uploads/import/products.csv';
    wplab_import_products_from_csv($csv_file);
}

// Запускаем событие при активации темы или плагина
if (!wp_next_scheduled('wplab_daily_product_import')) {
    wp_schedule_event(time(), 'daily', 'wplab_daily_product_import');
}

Этот код добавляет ежедневное задание, которое вызывает импорт из указанного файла. Файл можно обновлять через FTP или иными способами.

Расширение функционала: импорт изображений и атрибутов

Для полноценного импорта товаров потребуется добавить обработку изображений и атрибутов. Пример загрузки изображения из URL и привязки к товару:

function wplab_set_product_image_from_url($product_id, $image_url) {
    require_once ABSPATH . 'wp-admin/includes/file.php';
    require_once ABSPATH . 'wp-admin/includes/media.php';
    require_once ABSPATH . 'wp-admin/includes/image.php';

    // Скачиваем файл во временную папку
    $tmp = download_url($image_url);
    if (is_wp_error($tmp)) {
        error_log('WPLab Import: ошибка загрузки изображения '.$image_url);
        return false;
    }

    // Создаем массив $_FILES
    $file_array = array(
        'name' => basename($image_url),
        'tmp_name' => $tmp
    );

    $id = media_handle_sideload($file_array, $product_id);
    if (is_wp_error($id)) {
        @unlink($tmp);
        error_log('WPLab Import: ошибка добавления изображения в медиа библиотеку');
        return false;
    }

    set_post_thumbnail($product_id, $id);
    return true;
}

Вызывать эту функцию можно внутри цикла импорта, передавая URL изображения из CSV.

Для атрибутов нужно использовать методы WC_Product::get_attributes() и WC_Product::set_attributes(), создавая объекты WC_Product_Attribute с нужными значениями.

Рекомендации по безопасности и производительности

При импорте больших CSV файлов важно учитывать:

  • Ограничения памяти и времени выполнения PHP. Используйте разбивку на части или WP CLI для запуска;
  • Проверку и валидацию данных перед вставкой;
  • Логирование ошибок для отладки;
  • Резервное копирование базы перед массовыми изменениями.

Рассмотренный код — базовый пример, который можно развивать под конкретные задачи магазина.

Заключение

Автоматический импорт товаров из CSV в WooCommerce — мощный инструмент для эффективного управления каталогом. Используя как готовые плагины, так и собственные скрипты, можно настроить процесс под любые требования и обеспечить актуальность данных без лишних ручных операций.

Для расширения функционала можно обратить внимание на плагины с расширениями в WPShop, которые помогут упростить задачи импорта и управления товарами.

Как создать автоматическое сохранение изменений в WordPress
08.04.2026
Создание и использование пользовательских атрибутов data в WordPress
29.01.2026
Как использовать WPRemark для автоматического контроля качества контента в WordPress
23.01.2026
Автоматизация создания резервных копий WordPress: скрипты и плагины
29.11.2025
Ограничение количества попыток входа в WordPress для защиты сайта
03.12.2025