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

Почему автоматический импорт продуктов из CSV важен для интернет-магазина на WordPress

Для владельцев интернет-магазинов на WooCommerce и других платформах WordPress крайне важна возможность быстро и без ошибок загружать большое количество товаров. Ручное добавление продуктов занимает много времени и подвержено ошибкам, особенно при регулярном обновлении ассортимента.

Автоматический импорт из CSV позволяет не только сэкономить время, но и обеспечить регулярное обновление данных: цены, наличие, описания и изображения. Это особенно актуально при работе с поставщиками, которые регулярно присылают обновленные файлы с каталогами.

В этой статье мы рассмотрим, как реализовать такой импорт с помощью готовых плагинов и собственного кода, учитывая особенности WordPress и WooCommerce.

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

Плагин WP All Import

WP All Import — один из самых популярных и мощных плагинов для импорта данных из CSV и XML файлов. Он поддерживает любые типы записей, включая продукты WooCommerce. Его можно использовать для однократного импорта и для настройки автоматического импорта по расписанию.

Плюсы WP All Import:

  • Простота настройки
  • Поддержка кастомных полей и вариаций товаров
  • Возможность планирования автоматического импорта через cron

Недостаток — полноценно использовать все функции можно только в платной версии.

Плагин Product CSV Import Suite

Официальный плагин WooCommerce для импорта продуктов из CSV. Позволяет импортировать сложные продукты с вариациями, атрибутами и метаданными. Поддерживает обновление уже загруженных товаров.

Минус — платный, но интеграция с WooCommerce идет без проблем.

Быстрый импорт через плагин Really Simple CSV Importer

Если у вас простой каталог или кастомные посты, этот бесплатный плагин подойдет для базового импорта. Он не заточен под WooCommerce, но быстро загружает записи из CSV в базу WordPress.

Кастомное решение: написание функции автоматического импорта CSV в WordPress

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

Основные шаги:

  • Чтение CSV файла
  • Парсинг данных
  • Создание или обновление продуктов через WP функции
  • Обработка изображений и атрибутов

Пример функции для импорта CSV (wptalk_import_products_from_csv)

function wptalk_import_products_from_csv($filepath) {
    if (!file_exists($filepath)) {
        return new WP_Error('file_not_found', 'CSV файл не найден');
    }
    
    $handle = fopen($filepath, 'r');
    if (!$handle) {
        return new WP_Error('file_open_error', 'Не удалось открыть CSV файл');
    }
    
    $header = fgetcsv($handle, 0, ','); // Читаем заголовок
    if (!$header) {
        fclose($handle);
        return new WP_Error('empty_file', 'CSV файл пуст или некорректен');
    }
    
    while (($row = fgetcsv($handle, 0, ',')) !== false) {
        $data = array_combine($header, $row);
        if (!$data) continue;
        
        // Проверяем обязательные поля
        if (empty($data['sku']) || empty($data['name'])) continue;
        
        // Проверяем есть ли продукт с таким SKU
        $existing_id = wptalk_get_product_id_by_sku($data['sku']);
        
        $post_data = array(
            'post_title' => sanitize_text_field($data['name']),
            'post_content' => sanitize_textarea_field($data['description'] ?? ''),
            'post_status' => 'publish',
            'post_type' => 'product',
        );
        
        if ($existing_id) {
            $post_data['ID'] = $existing_id;
            wp_update_post($post_data);
            $product_id = $existing_id;
        } else {
            $product_id = wp_insert_post($post_data);
        }
        
        if (is_wp_error($product_id)) continue;
        
        // Обновляем мета поля WooCommerce
        update_post_meta($product_id, '_sku', sanitize_text_field($data['sku']));
        update_post_meta($product_id, '_price', floatval($data['price'] ?? 0));
        update_post_meta($product_id, '_regular_price', floatval($data['price'] ?? 0));

        // Обработка изображений
        if (!empty($data['image_url'])) {
            wptalk_set_product_image($product_id, esc_url_raw($data['image_url']));
        }
    }
    fclose($handle);
    return true;
}

function wptalk_get_product_id_by_sku($sku) {
    $args = array(
        'post_type' => 'product',
        'meta_query' => array(
            array(
                'key' => '_sku',
                'value' => $sku,
                'compare' => '='
            )
        ),
        'fields' => 'ids',
        'posts_per_page' => 1
    );
    $query = new WP_Query($args);
    if (!empty($query->posts)) {
        return $query->posts[0];
    }
    return false;
}

function wptalk_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');

    // Проверяем, не установлена ли уже такая картинка
    $attachment_id = wptalk_get_attachment_id_by_url($image_url);
    if (!$attachment_id) {
        // Загружаем изображение из URL
        $tmp = download_url($image_url);
        if (is_wp_error($tmp)) return;

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

        $attachment_id = media_handle_sideload($file_array, $product_id);
        if (is_wp_error($attachment_id)) {
            @unlink($tmp);
            return;
        }
    }
    set_post_thumbnail($product_id, $attachment_id);
}

function wptalk_get_attachment_id_by_url($url) {
    global $wpdb;
    $attachment = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid=%s", $url));
    return $attachment ? intval($attachment) : false;
}

Как настроить автоматический запуск импорта по расписанию (cron) в WordPress

Чтобы импорт происходил автоматически, можно использовать wp-cron. Для этого создадим периодическое событие, которое будет запускать функцию импорта.

Пример добавления крон-задачи в functions.php темы или в плагине:

function wptalk_schedule_import() {
    if (!wp_next_scheduled('wptalk_import_csv_event')) {
        wp_schedule_event(time(), 'hourly', 'wptalk_import_csv_event');
    }
}
add_action('wp', 'wptalk_schedule_import');

add_action('wptalk_import_csv_event', 'wptalk_run_import');

function wptalk_run_import() {
    $csv_path = WP_CONTENT_DIR . '/uploads/products.csv';
    wptalk_import_products_from_csv($csv_path);
}

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

Советы по оптимизации и безопасности импорта CSV

При работе с импортом важно:

  • Проверять корректность и формат CSV файла перед обработкой.
  • Ограничивать размеры загружаемых файлов и время выполнения скрипта.
  • Проверять и фильтровать все входные данные для защиты от инъекций.
  • Использовать транзакции или пакетную обработку, чтобы не перегружать сервер.
  • Логировать ошибки и результаты импорта для диагностики.

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

Выводы

Автоматический импорт продуктов из CSV — необходимый инструмент для успешного управления интернет-магазином на WordPress/WooCommerce. Использование готовых плагинов упростит задачу, но кастомные решения дают полный контроль и гибкость.

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

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

Автоматический импорт контента из Instagram в WordPress
16.03.2026
Как создать автоматический импорт продуктов в WordPress из CSV файла
20.11.2025
Как установить ограничения на размер загружаемых файлов в WordPress
25.02.2026
Как создать мультиязычный сайт в WordPress без плагинов
30.11.2025
Отложенная публикация постов в WordPress: практическое руководство
09.01.2026