Как создать автоматический импорт продуктов из 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 для динамического изменения meta title
14.02.2026
Как автоматически удалять варианты товаров WooCommerce после первого заказа
25.05.2026
Как создать автоматическую защиту от спама на формы WordPress без CAPTCHA
11.12.2025
Как удалить или изменить автора в записях WordPress: практическое руководство
08.12.2025
Как создать автоматический импорт из Яндекс.Дзен в WordPress
04.04.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее