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

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

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

Вручную загружать товары через админ-панель удобно только при небольшом каталоге. Когда же сотни или тысячи позиций меняются ежедневно, это становится непрактично и требует много времени. Автоматический импорт позволяет:

  • Экономить время на обновлениях каталога;
  • Избежать ошибок при ручном вводе данных;
  • Интегрироваться с поставщиками, которые предоставляют данные в формате CSV;
  • Гибко настраивать логику обработки продуктов.

Подготовка CSV-файла и структура данных

Для корректного импорта важно, чтобы CSV-файл содержал все необходимые поля для создания товара в WooCommerce. Минимальный набор полей:

  • sku — уникальный артикул;
  • name — название товара;
  • description — описание;
  • regular_price — цена;
  • stock_quantity — количество на складе;
  • categories — категории через запятую;
  • images — ссылки на изображения через запятую.

Структура может расширяться в зависимости от потребностей (атрибуты, мета-поля, вариации и т.д.).

Создание функции автоматического импорта продуктов из CSV

Пример функции wpbook_import_products_from_csv, которая читает CSV, проверяет наличие товара по артикулу и создаёт или обновляет его.

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

    $handle = fopen($csv_file_path, 'r');
    if (!$handle) {
        error_log('Не удалось открыть CSV файл.');
        return;
    }

    $header = fgetcsv($handle);
    if (!$header) {
        error_log('CSV файл пуст или некорректен.');
        fclose($handle);
        return;
    }

    while (($row = fgetcsv($handle)) !== false) {
        $data = array_combine($header, $row);
        if (!$data || empty($data['sku'])) continue; // SKU обязателен

        $product_id = wc_get_product_id_by_sku($data['sku']);

        if ($product_id) {
            $product = wc_get_product($product_id);
        } else {
            $product = new WC_Product_Simple();
            $product->set_sku($data['sku']);
        }

        $product->set_name($data['name']);
        $product->set_description($data['description']);
        $product->set_regular_price($data['regular_price']);
        $product->set_stock_quantity((int)$data['stock_quantity']);
        $product->set_manage_stock(true);
        $product->set_stock_status($data['stock_quantity'] > 0 ? 'instock' : 'outofstock');

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

        $product->save();

        // Загрузка и прикрепление изображений
        if (!empty($data['images'])) {
            $image_urls = array_map('trim', explode(',', $data['images']));
            $attachment_ids = [];
            foreach ($image_urls as $image_url) {
                $attachment_id = wpbook_import_image_from_url($image_url, $product->get_id());
                if ($attachment_id) {
                    $attachment_ids[] = $attachment_id;
                }
            }
            if (!empty($attachment_ids)) {
                $product->set_image_id($attachment_ids[0]);
                if (count($attachment_ids) > 1) {
                    $product->set_gallery_image_ids(array_slice($attachment_ids, 1));
                }
                $product->save();
            }
        }
    }
    fclose($handle);
}

function wpbook_import_image_from_url($image_url, $post_id) {
    if (empty($image_url)) return false;

    $upload_dir = wp_upload_dir();
    $image_data = @file_get_contents($image_url);
    if (!$image_data) return false;

    $filename = basename($image_url);
    if (wp_mkdir_p($upload_dir['path'])) {
        $file = $upload_dir['path'] . '/' . $filename;
    } else {
        $file = $upload_dir['basedir'] . '/' . $filename;
    }

    file_put_contents($file, $image_data);

    $wp_filetype = wp_check_filetype($filename, null);

    $attachment = array(
        'post_mime_type' => $wp_filetype['type'],
        'post_title' => sanitize_file_name($filename),
        'post_content' => '',
        'post_status' => 'inherit'
    );

    $attach_id = wp_insert_attachment($attachment, $file, $post_id);
    require_once(ABSPATH . 'wp-admin/includes/image.php');
    $attach_data = wp_generate_attachment_metadata($attach_id, $file);
    wp_update_attachment_metadata($attach_id, $attach_data);

    return $attach_id;
}

Пояснения к коду

Функция wpbook_import_products_from_csv открывает CSV, читает построчно данные, ищет продукт по SKU и обновляет или создаёт новый продукт. Для категорий проверяется наличие термина, иначе создаётся новый. Изображения загружаются и прикрепляются к продукту.

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

Чтобы импорт происходил автоматически, можно настроить WP-Cron. Добавим задачу, которая будет запускать импорт, например, раз в сутки.

add_action('wpbook_daily_product_import', 'wpbook_daily_import_handler');

function wpbook_schedule_daily_import() {
    if (!wp_next_scheduled('wpbook_daily_product_import')) {
        wp_schedule_event(time(), 'daily', 'wpbook_daily_product_import');
    }
}
add_action('wp', 'wpbook_schedule_daily_import');

function wpbook_daily_import_handler() {
    $csv_path = WP_CONTENT_DIR . '/uploads/products-import.csv';
    wpbook_import_products_from_csv($csv_path);
}

Теперь, если положить обновленный CSV в указанную папку, импорт будет выполняться автоматически каждый день.

Советы по улучшению и расширению импорта

  • Добавьте логирование ошибок и успешных импортов для контроля;
  • Реализуйте обработку вариативных продуктов и атрибутов с помощью WC_Product_Variable;
  • Оптимизируйте загрузку изображений, чтобы не дублировать уже загруженные файлы;
  • Если используете плагин Clearfy Pro, можно дополнительно ускорить работу и очистить базу от лишних данных.

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

Если вы хотите более простой способ без программирования, рекомендуем обратить внимание на плагины:

  • WP All Import — мощный и гибкий импорт CSV/XML с поддержкой WooCommerce;
  • Product CSV Import Suite — официальный плагин WooCommerce;
  • WP Ultimate CSV Importer — бесплатный и платный функционал, поддержка пользовательских полей.

Однако для сложных или специфичных задач программный импорт даёт больше контроля и интеграции.

Заключение

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как автоматически отключать плагины в WordPress по расписанию
12.03.2026
Как удалить неиспользуемые изображения в WordPress и освободить место
23.12.2025
Как сделать автоматический rollback обновлений в WordPress при ошибках
21.02.2026
Как создать автоматический импорт из Яндекс.Дзен в WordPress
04.04.2026
Как использовать хуки в WordPress для расширения функциональности
11.11.2025
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее