Как создать автоматический импорт товаров в WooCommerce из JSON файла

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

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

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

Автоматизация помогает:

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

Плагин для импорта JSON в WooCommerce

Для начала можно использовать готовые решения. Например, WP Export Import — плагин, который поддерживает импорт товаров из JSON и CSV с настройкой расписания.

Этот плагин позволяет:

  • Настроить привязку полей JSON к полям товара WooCommerce.
  • Импортировать изображения по URL и автоматически прикреплять к товарам.
  • Обновлять товары по SKU.
  • Запускать импорт по расписанию через CRON.

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

Пример кастомного импорта товаров из JSON — базовый скрипт

Рассмотрим пример функции, которая загружает JSON-файл с удаленного сервера и импортирует товары в WooCommerce. Важно: перед использованием на боевом сайте протестируйте код в тестовой среде.

function wpdevelop_import_products_from_json($json_url) {
    $response = wp_remote_get($json_url);
    if (is_wp_error($response)) {
        error_log('Ошибка загрузки JSON: ' . $response->get_error_message());
        return;
    }
    $body = wp_remote_retrieve_body($response);
    $products = json_decode($body, true);
    if (!$products) {
        error_log('Ошибка декодирования JSON');
        return;
    }
    foreach ($products as $item) {
        // Проверка обязательных полей
        if (empty($item['sku']) || empty($item['name'])) continue;
        $product_id = wc_get_product_id_by_sku($item['sku']);
        if ($product_id) {
            $product = wc_get_product($product_id);
        } else {
            $product = new WC_Product_Simple();
            $product->set_sku($item['sku']);
        }
        $product->set_name($item['name']);
        $product->set_regular_price($item['price']);
        $product->set_description($item['description'] ?? '');
        $product->set_stock_quantity($item['stock'] ?? 0);
        $product->set_manage_stock(true);
        $product->save();
        // Импорт изображения
        if (!empty($item['image_url'])) {
            $attachment_id = wpdevelop_import_image($item['image_url'], $product->get_id());
            if ($attachment_id) {
                set_post_thumbnail($product->get_id(), $attachment_id);
            }
        }
    }
}

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

    $tmp = download_url($image_url);
    if (is_wp_error($tmp)) {
        return false;
    }
    $file_array = array(
        'name' => basename($image_url),
        'tmp_name' => $tmp
    );
    $id = media_handle_sideload($file_array, $post_id);
    if (is_wp_error($id)) {
        @unlink($tmp);
        return false;
    }
    return $id;
}

Этот код загружает JSON, проходит по списку товаров, создает или обновляет товары по SKU, устанавливает название, цену, описание и количество на складе, а также загружает изображение и прикрепляет его как миниатюру.

Как запускать импорт регулярно — использование WP-Cron

Для автоматизации импорта создадим задачу в WP-Cron, которая будет запускать функцию импорта по расписанию.

add_action('wpdevelop_scheduled_product_import', 'wpdevelop_run_product_import');
function wpdevelop_run_product_import() {
    $json_url = 'https://example.com/products.json';
    wpdevelop_import_products_from_json($json_url);
}

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

В этом примере импорт товаров из JSON будет запускаться ежечасно. Если нужно изменить интервал, можно создать собственное расписание через фильтр cron_schedules.

Добавление собственного интервала в WP-Cron

add_filter('cron_schedules', 'wpdevelop_add_custom_cron_interval');
function wpdevelop_add_custom_cron_interval($schedules) {
    $schedules['every_five_minutes'] = array(
        'interval' => 300, // 5 минут в секундах
        'display' => __('Каждые 5 минут')
    );
    return $schedules;
}

После этого можно заменить 'hourly' на 'every_five_minutes' в вызове wp_schedule_event.

Обработка ошибок и логирование

При автоматическом импорте важно отслеживать ошибки. В примерах выше мы используем error_log, но для удобства можно подключить плагин Clearfy Pro, который расширяет возможности логирования и оптимизации.

Также рекомендуем:

  • Писать результаты импорта в отдельный лог-файл.
  • Отправлять уведомления на email при возникновении критических ошибок.

Советы по оптимизации импорта

При большом количестве товаров импорт может занимать много ресурсов и времени.

  • Разбивайте импорт на части, чтобы избежать таймаутов.
  • Используйте транзакции и батчи, если работаете с БД напрямую.
  • Кэшируйте данные, если источник JSON не меняется часто.
  • Обрабатывайте только измененные товары, сравнивая хэш или дату обновления.

Заключение

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

Подробности и готовые решения ищите на WP Export Import и других инструментах от WPShop.

Как создать уникальную форму регистрации в WordPress с дополнительными полями
27.02.2026
Как создать динамическую таблицу в WordPress с помощью шорткода
30.12.2025
Как создать настройку автоматической отправки email из WPForms в WordPress
25.01.2026
Как использовать хуки для изменения функциональности WordPress
15.04.2026
Как правильно отключить Gutenberg для отдельных типов записей в WordPress
03.05.2026