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

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

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

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

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

Это особенно актуально для магазинов с большим ассортиментом и частыми изменениями.

Подготовка данных для импорта из CSV и API

Чаще всего поставщики предоставляют данные в формате CSV или через REST API. Главное — привести данные к структуре, понятной WooCommerce:

  • Название товара (post_title)
  • Описание (post_content)
  • Цена (_price, _regular_price)
  • Артикул (SKU)
  • Категории (product_cat)
  • Изображения (gallery, featured image)

Для API важно иметь авторизацию и понимать структуру предоставляемых данных.

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

Для упрощения задачи можно использовать проверенные плагины:

  • WP All Import Pro — мощный инструмент для импорта CSV/XML с возможностью расписания задач.
    Подробнее на WPSHOP.ru
  • Product Import Export for WooCommerce — бесплатный и удобный для базовых задач плагин.
  • WooCommerce REST API — для интеграции с внешними сервисами через код.

Но если нужна кастомизация и гибкость, стоит писать собственные скрипты на PHP.

Пример кастомного скрипта импорта из CSV

Рассмотрим пример функции wpaction_import_products_from_csv(), которая парсит CSV и создаёт или обновляет товары:

function wpaction_import_products_from_csv($csv_path) {
    if (!file_exists($csv_path)) {
        return new WP_Error('file_not_found', 'CSV файл не найден');
    }

    if (($handle = fopen($csv_path, 'r')) !== false) {
        $header = fgetcsv($handle, 1000, ',');
        while (($data = fgetcsv($handle, 1000, ',')) !== false) {
            $row = array_combine($header, $data);

            $sku = sanitize_text_field($row['sku']);
            $product_id = wc_get_product_id_by_sku($sku);

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

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

            // Категории
            if (!empty($row['categories'])) {
                $cats = array_map('trim', explode('|', $row['categories']));
                $cat_ids = [];
                foreach ($cats 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[] = $term['term_id'] ?? $term->term_id;
                    }
                }
                $product->set_category_ids($cat_ids);
            }

            $product->save();
        }
        fclose($handle);
    }
}

Такой код можно запускать по расписанию с помощью WP-Cron или вручную из административной панели.

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

Чтобы импорт происходил без вашего участия, настроим WP-Cron задачу:

add_action('wpaction_import_products_cron_hook', 'wpaction_import_products_cron_function');
function wpaction_import_products_cron_function() {
    $csv_path = WP_CONTENT_DIR . '/uploads/import/products.csv';
    $result = wpaction_import_products_from_csv($csv_path);
    if (is_wp_error($result)) {
        error_log('Ошибка импорта продуктов: ' . $result->get_error_message());
    }
}

if (!wp_next_scheduled('wpaction_import_products_cron_hook')) {
    wp_schedule_event(time(), 'hourly', 'wpaction_import_products_cron_hook');
}

Этот код установит задачу на каждый час. Путь к CSV нужно будет обновлять по факту.

Импорт через WooCommerce REST API

Если поставщик предоставляет API, то можно написать запросы к нему и создавать товары через WooCommerce REST API или напрямую через классы WC_Product. Вот пример запроса к API и создания товара:

function wpaction_import_products_from_api() {
    $response = wp_remote_get('https://example.com/api/products');
    if (is_wp_error($response)) {
        return;
    }

    $body = wp_remote_retrieve_body($response);
    $products = json_decode($body, true);

    if (!is_array($products)) {
        return;
    }

    foreach ($products as $item) {
        $sku = sanitize_text_field($item['sku']);
        $product_id = wc_get_product_id_by_sku($sku);

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

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

        $product->save();
    }
}

Рекомендации по работе с изображениями и вариативными товарами

Для загрузки изображений из URL нужно использовать функцию media_sideload_image() и привязывать полученные ID к товару:

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

    $image_id = media_sideload_image($image_url, $product->get_id(), null, 'id');
    if (!is_wp_error($image_id)) {
        $product->set_image_id($image_id);
        $product->save();
    }
}

Вариативные товары импортируются сложнее, здесь нужно создавать родителя с типом variable и дочерние вариации. Для начала рекомендуется изучить документацию WooCommerce по вариациям.

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

Для улучшения качества описаний и автоматического создания уникального контента можно интегрировать импорт с плагином WPGPT, который генерирует тексты на основе шаблонов. Это поможет избежать дублирования и повысить SEO.

Выводы и советы

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

Такое решение позволит существенно сэкономить время и сделать магазин более актуальным для покупателей.

Как добавить дополнительные мета-поля в административную панель WordPress
22.12.2025
Как создать группу пользователей в WordPress с правилами доступа
04.01.2026
Как отключить автоматические обновления в WordPress с помощью кода
04.03.2026
Как установить охранные роли в WordPress для доступа к административной панели
09.03.2026
Как добавить настройки для плагинов в WordPress с примерами кода
22.02.2026