Автоматизация импорта товаров в WooCommerce — одна из частых задач для магазинов, которые работают с поставщиками или регулярно обновляют ассортимент. Ручной импорт через CSV или XML неудобен и требует времени, особенно если товаров много. В этой статье разберём, как настроить автоматический импорт продуктов в WooCommerce с помощью готовых плагинов и кастомного кода.
Почему автоматический импорт товаров важен для WooCommerce
Автоматизация позволяет:
- экономить время на загрузке и обновлении товаров;
- исключать ошибки, связанные с ручным вводом;
- обеспечивать актуальность ассортимента в интернет-магазине;
- быстро реагировать на изменения у поставщиков.
Для интернет-магазинов с большим ассортиментом или часто меняющимся каталогом автоматический импорт — необходимость.
Популярные плагины для автоматического импорта в WooCommerce
1. WP All Import + WooCommerce Add-On
Один из самых мощных и гибких плагинов для импорта данных из CSV или XML. Позволяет создать расписание автоматического импорта через cron и точно настраивать соответствие полей.
Преимущества:
- Поддержка любых форматов CSV/XML;
- Импорт изображений, категорий, атрибутов, вариаций;
- Расписание автоматического импорта через cron;
- Интуитивный интерфейс с drag-and-drop сопоставлением полей.
Недостаток — платная версия для WooCommerce.
2. WooCommerce Product Feed PRO
Этот плагин позволяет не только создавать фиды для маркетплейсов, но и настраивать импорт товаров из сторонних источников. Есть возможность автоматизации через cron и поддержка различных форматов.
3. WPImport
Более бюджетный вариант с поддержкой автоматического импорта через cron. Подходит для простых каталогов и CSV.
Как самостоятельно настроить автоматический импорт через cron на PHP
Если вы хотите сделать кастомное решение без использования платных плагинов, можно написать скрипт, который будет загружать CSV файл, парсить его и создавать/обновлять товары в WooCommerce.
Пример функции для импорта товара из массива данных в WooCommerce с префиксом функции wpaddons_:
function wpaddons_import_product_from_array($product_data) {
if(empty($product_data['sku'])) {
return false; // SKU обязателен для идентификации
}
$product_id = wc_get_product_id_by_sku($product_data['sku']);
if($product_id) {
$product = wc_get_product($product_id);
} else {
$product = new WC_Product_Simple();
}
$product->set_name($product_data['name']);
$product->set_sku($product_data['sku']);
$product->set_regular_price($product_data['price']);
$product->set_description($product_data['description'] ?? '');
$product->save();
// Обработка изображений
if(!empty($product_data['image_url'])) {
$image_id = wpaddons_upload_image_from_url($product_data['image_url']);
if($image_id) {
$product->set_image_id($image_id);
$product->save();
}
}
return $product->get_id();
}
function wpaddons_upload_image_from_url($image_url) {
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/image.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, 0);
if(is_wp_error($id)) {
@unlink($tmp);
return false;
}
return $id;
}Далее создадим скрипт для парсинга CSV и вызова этой функции:
function wpaddons_import_products_from_csv($csv_path) {
if(!file_exists($csv_path)) {
return;
}
$handle = fopen($csv_path, 'r');
if(!$handle) {
return;
}
$header = fgetcsv($handle);
if(!$header) {
fclose($handle);
return;
}
while(($row = fgetcsv($handle)) !== false) {
$data = array_combine($header, $row);
wpaddons_import_product_from_array($data);
}
fclose($handle);
}Осталось настроить cron-задачу для запуска импорта, например, командой WP-CLI или через wp_schedule_event:
add_action('wpaddons_daily_product_import', 'wpaddons_run_daily_import');
function wpaddons_run_daily_import() {
$csv_path = WP_CONTENT_DIR . '/uploads/products_import.csv';
wpaddons_import_products_from_csv($csv_path);
}
if(!wp_next_scheduled('wpaddons_daily_product_import')) {
wp_schedule_event(time(), 'daily', 'wpaddons_daily_product_import');
}Обработка ошибок и логирование
В реальных проектах важно логировать ошибки и успешные операции. Можно использовать встроенный класс WC_Logger для записи логов импорта:
$logger = wc_get_logger();
$context = array( 'source' => 'wpaddons-product-import' );
$logger->info('Товар с SKU ' . $product_data['sku'] . ' импортирован успешно', $context);
$logger->error('Не удалось загрузить изображение для SKU ' . $product_data['sku'], $context);Так вы сможете отслеживать, что именно происходит при импорте и быстро реагировать на проблемы.
Дополнительные советы и рекомендации
- Всегда делайте резервные копии сайта и базы данных перед настройкой автоматического импорта;
- Тестируйте импорт на тестовом сайте или в отдельной среде, чтобы избежать поломки магазина;
- Если у поставщика сложный формат данных, рассмотрите вариант создания промежуточного скрипта для преобразования в удобный CSV;
- Для больших каталогов рекомендуется разделять импорт на части, чтобы избежать таймаутов;
- Используйте кеширование и оптимизацию, чтобы импорт не тормозил работу сайта.
Заключение
Автоматический импорт товаров в WooCommerce можно реализовать как с помощью мощных плагинов вроде WP All Import, так и на базе собственного кода. Главное — продумать корректную обработку данных, обновление товаров по уникальному идентификатору (SKU), загрузку изображений и настройку расписания запуска импорта. Такой подход значительно облегчает управление ассортиментом и позволяет держать магазин в актуальном состоянии без ручного труда.
Для расширения возможностей WooCommerce рекомендуем ознакомиться с продуктами из WPShop, которые помогут автоматизировать многие процессы и улучшить управление магазином.