Автоматизация импорта продуктов в WooCommerce — частая задача для владельцев интернет-магазинов, которые получают товарные данные от поставщиков, дистрибьюторов или из других систем. Ручной импорт через CSV неудобен при регулярных обновлениях и больших объемах. В этой статье разберём, как настроить автоматический импорт товаров из внешних источников, используя WooCommerce, PHP и ряд полезных плагинов.
Почему важен автоматический импорт продуктов в WooCommerce
Ручное добавление и обновление товаров занимает много времени и порождает ошибки. Автоматизация позволяет:
- Сократить время на обновление каталога;
- Избежать ошибок при вводе данных;
- Обновлять наличие и цены автоматически;
- Интегрировать магазин с внешними системами поставщиков.
Это особенно актуально для магазинов с большим ассортиментом и частыми изменениями.
Подготовка данных для импорта из CSV и API
Чаще всего поставщики предоставляют данные в формате CSV или через REST API. Главное — привести данные к структуре, понятной WooCommerce:
- Название товара (post_title)
- Описание (post_content)
- Цена (_price, _regular_price)
- Артикул (SKU)
- Категории (product_cat)
- Изображения (gallery, featured image)
Для API важно иметь авторизацию и понимать структуру предоставляемых данных.
Использование плагинов для автоматического импорта
Для упрощения задачи можно использовать проверенные плагины:
- WP All Import Pro — мощный инструмент для импорта CSV/XML с возможностью расписания задач.
Подробнее на WPSHOP.ru - Product Import Export for WooCommerce — бесплатный и удобный для базовых задач плагин.
- WooCommerce REST API — для интеграции с внешними сервисами через код.
Но если нужна кастомизация и гибкость, стоит писать собственные скрипты на PHP.
Пример кастомного скрипта импорта из CSV
Рассмотрим пример функции wpaction_import_products_from_csv(), которая парсит CSV и создаёт или обновляет товары:
function wpaction_import_products_from_csv($csv_path) {
if (!file_exists($csv_path)) {
return new WP_Error('file_not_found', 'CSV файл не найден');
}
if (($handle = fopen($csv_path, 'r')) !== false) {
$header = fgetcsv($handle, 1000, ',');
while (($data = fgetcsv($handle, 1000, ',')) !== false) {
$row = array_combine($header, $data);
$sku = sanitize_text_field($row['sku']);
$product_id = wc_get_product_id_by_sku($sku);
if ($product_id) {
$product = wc_get_product($product_id);
} else {
$product = new WC_Product_Simple();
}
$product->set_name(sanitize_text_field($row['name']));
$product->set_price(floatval($row['price']));
$product->set_regular_price(floatval($row['price']));
$product->set_sku($sku);
$product->set_description(sanitize_textarea_field($row['description']));
// Категории
if (!empty($row['categories'])) {
$cats = array_map('trim', explode('|', $row['categories']));
$cat_ids = [];
foreach ($cats as $cat_name) {
$term = get_term_by('name', $cat_name, 'product_cat');
if (!$term) {
$term = wp_insert_term($cat_name, 'product_cat');
}
if (!is_wp_error($term)) {
$cat_ids[] = $term['term_id'] ?? $term->term_id;
}
}
$product->set_category_ids($cat_ids);
}
$product->save();
}
fclose($handle);
}
}Такой код можно запускать по расписанию с помощью WP-Cron или вручную из административной панели.
Автоматизация запуска импорта с WP-Cron
Чтобы импорт происходил без вашего участия, настроим WP-Cron задачу:
add_action('wpaction_import_products_cron_hook', 'wpaction_import_products_cron_function');
function wpaction_import_products_cron_function() {
$csv_path = WP_CONTENT_DIR . '/uploads/import/products.csv';
$result = wpaction_import_products_from_csv($csv_path);
if (is_wp_error($result)) {
error_log('Ошибка импорта продуктов: ' . $result->get_error_message());
}
}
if (!wp_next_scheduled('wpaction_import_products_cron_hook')) {
wp_schedule_event(time(), 'hourly', 'wpaction_import_products_cron_hook');
}Этот код установит задачу на каждый час. Путь к CSV нужно будет обновлять по факту.
Импорт через WooCommerce REST API
Если поставщик предоставляет API, то можно написать запросы к нему и создавать товары через WooCommerce REST API или напрямую через классы WC_Product. Вот пример запроса к API и создания товара:
function wpaction_import_products_from_api() {
$response = wp_remote_get('https://example.com/api/products');
if (is_wp_error($response)) {
return;
}
$body = wp_remote_retrieve_body($response);
$products = json_decode($body, true);
if (!is_array($products)) {
return;
}
foreach ($products as $item) {
$sku = sanitize_text_field($item['sku']);
$product_id = wc_get_product_id_by_sku($sku);
if ($product_id) {
$product = wc_get_product($product_id);
} else {
$product = new WC_Product_Simple();
}
$product->set_name(sanitize_text_field($item['name']));
$product->set_price(floatval($item['price']));
$product->set_regular_price(floatval($item['price']));
$product->set_sku($sku);
$product->set_description(sanitize_textarea_field($item['description']));
$product->save();
}
}Рекомендации по работе с изображениями и вариативными товарами
Для загрузки изображений из URL нужно использовать функцию media_sideload_image() и привязывать полученные ID к товару:
function wpaction_set_product_image_from_url($product, $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');
$image_id = media_sideload_image($image_url, $product->get_id(), null, 'id');
if (!is_wp_error($image_id)) {
$product->set_image_id($image_id);
$product->save();
}
}Вариативные товары импортируются сложнее, здесь нужно создавать родителя с типом variable и дочерние вариации. Для начала рекомендуется изучить документацию WooCommerce по вариациям.
Использование плагина WPGPT для автоматизации и анализа импорта
Для улучшения качества описаний и автоматического создания уникального контента можно интегрировать импорт с плагином WPGPT, который генерирует тексты на основе шаблонов. Это поможет избежать дублирования и повысить SEO.
Выводы и советы
Автоматический импорт продуктов в WooCommerce требует внимания к структуре данных и регулярному обновлению. Используйте готовые плагины для упрощения или пишите свои решения, если нужны тонкие настройки. Не забывайте про обработку ошибок и логирование процессов, чтобы вовремя выявлять проблемы.
Такое решение позволит существенно сэкономить время и сделать магазин более актуальным для покупателей.