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

Если вы ведёте интернет-магазин на WordPress с WooCommerce, рано или поздно возникает задача массового импорта товаров из таблиц Excel. Хотя для этого существуют популярные плагины, иногда нужно обойтись без них, чтобы избежать лишних зависимостей и нагрузки на сайт. В этой статье мы подробно разберём, как создать собственный скрипт автоматического импорта товаров из файла Excel в WooCommerce с помощью PHP и библиотеки PHPSpreadsheet.

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

Многие магазины получают прайс-листы и каталоги товаров от поставщиков в формате Excel или CSV. Ручное добавление каждого товара занимает много времени и чревато ошибками. Автоматический импорт позволяет:

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

Встроенных средств для импорта Excel в WooCommerce нет, поэтому приходится использовать сторонние решения или писать собственные.

Подготовка: установка библиотеки PHPSpreadsheet для работы с Excel

Для чтения Excel-таблиц в PHP отлично подходит библиотека PHPSpreadsheet. Её легко установить через Composer:

composer require phpoffice/phpspreadsheet

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

После установки убедитесь, что автозагрузчик Composer подключён в вашем плагине или теме:

require_once __DIR__ . '/vendor/autoload.php';

Создание функции для импорта товаров из Excel в WooCommerce

Теперь создадим функцию wordpresses_import_products_from_excel, которая будет принимать путь к файлу Excel и создавать или обновлять товары WooCommerce.

function wordpresses_import_products_from_excel($file_path) {
    if (!class_exists('WooCommerce')) {
        return new WP_Error('woocommerce_not_active', 'WooCommerce не активен');
    }
    
    if (!file_exists($file_path)) {
        return new WP_Error('file_not_found', 'Файл не найден');
    }
    
    // Подключаем PHPSpreadsheet
    $spreadsheet = null;
    try {
        $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile($file_path);
        $spreadsheet = $reader->load($file_path);
    } catch (Exception $e) {
        return new WP_Error('load_error', 'Ошибка загрузки файла: ' . $e->getMessage());
    }
    
    $worksheet = $spreadsheet->getActiveSheet();
    $rows = $worksheet->toArray();
    
    // Предполагаются колонки: SKU, Название, Описание, Цена, Количество
    $header = array_map('mb_strtolower', $rows[0]);
    $sku_index = array_search('sku', $header);
    $name_index = array_search('название', $header);
    $desc_index = array_search('описание', $header);
    $price_index = array_search('цена', $header);
    $stock_index = array_search('количество', $header);
    
    if ($sku_index === false || $name_index === false || $price_index === false) {
        return new WP_Error('invalid_format', 'Отсутствуют обязательные колонки SKU, Название или Цена');
    }
    
    $imported = 0;
    $updated = 0;
    
    for ($i = 1; $i < count($rows); $i++) {
        $row = $rows[$i];
        $sku = trim($row[$sku_index]);
        if (empty($sku)) continue;
        
        $name = trim($row[$name_index]);
        $description = $desc_index !== false ? trim($row[$desc_index]) : '';
        $price = floatval($row[$price_index]);
        $stock = $stock_index !== false ? intval($row[$stock_index]) : 0;
        
        $product_id = wc_get_product_id_by_sku($sku);
        if ($product_id) {
            // Обновляем продукт
            $product = wc_get_product($product_id);
            $product->set_name($name);
            $product->set_description($description);
            $product->set_regular_price($price);
            $product->set_stock_quantity($stock);
            $product->set_stock_status($stock > 0 ? 'instock' : 'outofstock');
            $product->save();
            $updated++;
        } else {
            // Создаём новый продукт
            $product = new WC_Product_Simple();
            $product->set_sku($sku);
            $product->set_name($name);
            $product->set_description($description);
            $product->set_regular_price($price);
            $product->set_stock_quantity($stock);
            $product->set_stock_status($stock > 0 ? 'instock' : 'outofstock');
            $product->save();
            $imported++;
        }
    }
    
    return [
        'imported' => $imported,
        'updated' => $updated,
        'total' => $imported + $updated
    ];
}

В этой функции мы:

  • Проверяем доступность WooCommerce и файла Excel;
  • Читаем таблицу и ищем необходимые колонки по названию;
  • Для каждой строки либо обновляем существующий товар по SKU, либо создаём новый;
  • Обрабатываем название, описание, цену и количество на складе;
  • Возвращаем статистику по импортированным и обновлённым товарам.

Как использовать функцию импорта в WordPress

Для вызова импорта можно создать административную страницу или использовать WP-CLI, но для простоты рассмотрим пример вызова из кода:

add_action('admin_post_wordpresses_import_excel', 'wordpresses_handle_import_excel');

function wordpresses_handle_import_excel() {
    if (!current_user_can('manage_woocommerce')) {
        wp_die('Доступ запрещён');
    }
    
    if (empty($_FILES['excel_file']['tmp_name'])) {
        wp_die('Файл не загружен');
    }
    
    $result = wordpresses_import_products_from_excel($_FILES['excel_file']['tmp_name']);
    if (is_wp_error($result)) {
        wp_die('Ошибка: ' . $result->get_error_message());
    }
    
    wp_redirect(admin_url('edit.php?post_type=product&imported=' . intval($result['imported']) . '&updated=' . intval($result['updated'])));
    exit;
}

В админке можно создать форму загрузки файла Excel и отправлять её на обработку по адресу admin-post.php?action=wordpresses_import_excel. После загрузки пользователь увидит, сколько товаров было импортировано и обновлено.

Рекомендации и распространённые ошибки

В работе с импортом стоит учитывать несколько моментов:

  • Убедитесь, что у товаров уникальный SKU — ключ для обновления;
  • Обрабатывайте ошибки чтения файла и пустые строки;
  • Для больших файлов разбивайте импорт на части или используйте wp_schedule_event для фоновой обработки;
  • Проверяйте права доступа, чтобы импорт не могли запускать случайные пользователи;
  • Если нужно импортировать изображения, потребуется дополнительный код для загрузки их в медиа-библиотеку и прикрепления к товарам.

Альтернативные плагины для импорта Excel в WooCommerce

Если вы хотите использовать готовое решение, обратите внимание на следующие плагины, которые можно найти на WPShop.ru:

  • Woo Import Export — простой плагин для импорта и экспорта товаров в CSV и Excel;
  • Clearfy Pro — оптимизирует работу сайта и поддерживает импорт товаров;
  • My Popup — дополнительно можно настроить всплывающие подсказки для администраторов при импорте.

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

Как создать собственный вид записи в WordPress для специфических типов данных
15.12.2025
Как сделать отзывы с оценками в WordPress без плагинов
18.03.2026
Как создать автоматический раздел постов в WordPress по дате и категории
08.03.2026
Как удалить неиспользуемые шорткоды в WordPress без плагинов
07.04.2026
Как создать автоматический импорт постов в WordPress из Google Sheets
12.04.2026