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

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

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

Такое решение особенно полезно, если вы не хотите использовать сторонние платные сервисы, а хотите точечно решить задачу под свой бизнес. Мы затронем важные аспекты — от обработки CSV или JSON файлов до использования WP-Cron и REST API.

Обзор ключевых компонентов для автоматического импорта

Источники данных для импорта

Импорт товаров чаще всего происходит из CSV или JSON файлов, которые поставщик обновляет регулярно. Это могут быть локальные файлы, либо файлы на FTP, HTTP(S) или даже API. В нашем примере мы рассмотрим импорт из CSV, так как этот формат наиболее распространён.

Использование WP-Cron для автоматизации

WP-Cron — встроенная система планировщика заданий в WordPress. Она позволяет запускать функции по расписанию, например, раз в сутки или по вашему расписанию. Это избавляет от необходимости запускать импорт вручную.

Создание кастомного плагина для импорта

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

Пример: базовый плагин для импорта товаров из CSV в WooCommerce

Начнём с создания плагина wpbuy-auto-import.php с минимальной структурой и функционалом.

<?php
/**
 * Plugin Name: WPBuy Auto Import WooCommerce
 * Description: Автоматический импорт товаров в WooCommerce из CSV с использованием WP-Cron
 * Version: 1.0
 * Author: WPBuy
 */

// Регистрируем событие WP-Cron при активации плагина
function wpbuyai_schedule_import() {
    if (!wp_next_scheduled('wpbuyai_import_event')) {
        wp_schedule_event(time(), 'hourly', 'wpbuyai_import_event');
    }
}
register_activation_hook(__FILE__, 'wpbuyai_schedule_import');

// Удаляем событие при деактивации
function wpbuyai_deactivate() {
    wp_clear_scheduled_hook('wpbuyai_import_event');
}
register_deactivation_hook(__FILE__, 'wpbuyai_deactivate');

// Хук для запуска импорта
add_action('wpbuyai_import_event', 'wpbuyai_import_products');

function wpbuyai_import_products() {
    $file = plugin_dir_path(__FILE__) . 'import/products.csv';
    if (!file_exists($file)) {
        error_log('WPBuy Import: файл не найден ' . $file);
        return;
    }

    if (($handle = fopen($file, 'r')) !== false) {
        $header = fgetcsv($handle, 1000, ',');
        while (($data = fgetcsv($handle, 1000, ',')) !== false) {
            $product_data = array_combine($header, $data);
            wpbuyai_create_or_update_product($product_data);
        }
        fclose($handle);
    }
}

function wpbuyai_create_or_update_product($data) {
    if (empty($data['sku'])) return;

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

    if ($product_id) {
        $product = wc_get_product($product_id);
        // Обновляем существующий продукт
        $product->set_name($data['name']);
        $product->set_regular_price($data['price']);
        $product->set_stock_quantity(intval($data['stock']));
        $product->save();
    } else {
        // Создаем новый продукт
        $product = new WC_Product_Simple();
        $product->set_name($data['name']);
        $product->set_sku($data['sku']);
        $product->set_regular_price($data['price']);
        $product->set_stock_quantity(intval($data['stock']));
        $product->save();
    }
}

В этом коде мы создали плагин, который раз в час будет пытаться импортировать товары из файла import/products.csv внутри папки плагина. Функция wpbuyai_create_or_update_product ищет товар по SKU, обновляет данные или создаёт новый товар.

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

В реальных условиях важно загружать изображения и назначать категории товарам. Добавим в функцию обработки товаров пример загрузки изображения и установки категории.

function wpbuyai_create_or_update_product($data) {
    if (empty($data['sku'])) return;

    $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_regular_price($data['price']);
    $product->set_stock_quantity(intval($data['stock']));

    // Назначаем категорию
    if (!empty($data['category'])) {
        $term = term_exists($data['category'], 'product_cat');
        if (!$term) {
            $term = wp_insert_term($data['category'], 'product_cat');
        }
        if (!is_wp_error($term)) {
            $product->set_category_ids(array($term['term_id']));
        }
    }

    $product->save();

    // Загрузка изображения
    if (!empty($data['image_url'])) {
        wpbuyai_set_product_image($product->get_id(), $data['image_url']);
    }
}

function wpbuyai_set_product_image($product_id, $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');

    // Проверяем, есть ли уже изображение
    if (has_post_thumbnail($product_id)) return;

    // Скачиваем изображение во временную папку
    $tmp = download_url($image_url);

    if (is_wp_error($tmp)) return;

    $file = array(
        'name'     => basename($image_url),
        'tmp_name' => $tmp
    );

    $attachment_id = media_handle_sideload($file, $product_id);

    if (is_wp_error($attachment_id)) {
        @unlink($tmp);
        return;
    }

    set_post_thumbnail($product_id, $attachment_id);
}

Теперь импорт будет также создавать категории, если их нет, и загружать изображения к товарам.

Как добавить настройки и запуск импорта вручную в админке

Для удобства можно добавить страницу настроек с кнопкой запуска импорта вручную. Это поможет тестировать и запускать импорт вне расписания.

Пример добавления меню и обработчика:

add_action('admin_menu', function() {
    add_submenu_page('woocommerce', 'Импорт продуктов', 'Импорт продуктов', 'manage_woocommerce', 'wpbuyai-import', 'wpbuyai_import_page');
});

function wpbuyai_import_page() {
    if (isset($_POST['wpbuyai_import'])) {
        wpbuyai_import_products();
        echo '<div class="updated notice">Импорт выполнен</div>';
    }
    echo '<h1>Ручной запуск импорта товаров</h1>';
    echo '<form method="post"><input type="submit" name="wpbuyai_import" value="Запустить импорт" class="button button-primary" /></form>';
}

Интеграция с плагином Clearfy Pro для оптимизации импорта

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

Заключение

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

Как запустить WordPress в разработке на localhost с использованием Docker
10.02.2026
Как добавить динамические метаданные в WordPress для опытных пользователей
24.03.2026
Как удалить старые изображения в WordPress без риска для сайта
21.03.2026
Как удалить проблему раздвоенного общего меню в WordPress
28.02.2026
Автоматическое сохранение изменений в корзине WooCommerce без перезагрузки страницы
10.05.2026