Если вы ведёте интернет-магазин на 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 — дополнительно можно настроить всплывающие подсказки для администраторов при импорте.
Использование готовых плагинов упростит задачу, но собственный скрипт даёт больше гибкости и контроля.