Автоматизация импорта товаров в WooCommerce — частая задача для владельцев интернет-магазинов, особенно если ассортимент регулярно обновляется или поступает от поставщиков в формате CSV. В этой статье подробно разберем, как создать собственный механизм автоматического импорта продуктов из CSV файла в WooCommerce, используя PHP-код и популярные плагины, а также рассмотрим примеры для расширения функциональности.
Почему автоматический импорт продуктов важен для WooCommerce
Ручной ввод товаров в WooCommerce занимает много времени и подвержен ошибкам. Автоматизация позволяет:
- Экономить время на загрузке и обновлении каталога;
- Минимизировать ошибки при вводе данных;
- Синхронизировать ассортимент с поставщиками или внешними системами;
- Обеспечить регулярное обновление цен, остатков и описаний.
Для этого можно использовать готовые решения, например, плагин ABC Pagination с расширениями для импорта, но мы посмотрим, как сделать базовый импорт самостоятельно с возможностью расширения.
Использование плагинов для импорта CSV в WooCommerce
Плагин WP All Import
Один из самых популярных и мощных плагинов — WP All Import. Он поддерживает импорт любых типов записей, в том числе товаров WooCommerce, и умеет обрабатывать сложные CSV и XML файлы.
Преимущества WP All Import:
- Простой интерфейс для настройки сопоставления колонок CSV с полями WooCommerce;
- Поддержка обновления существующих товаров по ID или SKU;
- Возможность автоматического запуска импорта по расписанию;
- Поддержка пользовательских полей и атрибутов.
Однако у него есть платные версии для WooCommerce, и иногда хочется более кастомного решения.
Плагин Product CSV Import Suite
Официальный плагин WooCommerce — Product CSV Import Suite — также позволяет импортировать и обновлять товары, вариации и атрибуты через CSV. Он интегрируется в стандартный импорт WooCommerce.
Но этот плагин не автоматизирует процесс по расписанию, и нужна дополнительная настройка cron для регулярного импорта.
Создаем собственный скрипт автоматического импорта CSV в WooCommerce
Если хочется гибкости и полной автоматизации, можно написать собственный PHP-скрипт, который будет загружать CSV, парсить его и создавать/обновлять товары. Рассмотрим пример с использованием стандартных функций WooCommerce и WordPress.
Основные шаги скрипта
- Загрузка CSV файла (например, с FTP или через URL);
- Парсинг CSV с помощью функции
fgetcsv(); - Поиск товара по SKU или другому уникальному идентификатору;
- Создание нового товара или обновление существующего;
- Заполнение основных полей: название, описание, цена, артикул, категории;
- Обработка изображений и атрибутов;
- Логирование результатов и ошибок.
Пример кода для импорта товаров из CSV
function wplab_import_products_from_csv($csv_file_path) {
if (!file_exists($csv_file_path)) {
error_log('WPLab Import: CSV файл не найден');
return;
}
$handle = fopen($csv_file_path, 'r');
if (!$handle) {
error_log('WPLab Import: не удалось открыть CSV');
return;
}
$header = fgetcsv($handle, 0, ','); // Читаем заголовок
if (!$header) {
error_log('WPLab Import: пустой CSV');
fclose($handle);
return;
}
while (($row = fgetcsv($handle, 0, ',')) !== false) {
$data = array_combine($header, $row);
if (!$data) continue;
$sku = sanitize_text_field($data['sku']);
if (empty($sku)) continue;
// Ищем продукт по SKU
$existing_product_id = wplab_find_product_by_sku($sku);
if ($existing_product_id) {
$product = wc_get_product($existing_product_id);
} else {
$product = new WC_Product_Simple();
}
$product->set_name(sanitize_text_field($data['name']));
$product->set_regular_price(floatval($data['price']));
$product->set_sku($sku);
$product->set_description(sanitize_textarea_field($data['description']));
// Категории
if (!empty($data['categories'])) {
$categories = array_map('trim', explode('|', $data['categories']));
$cat_ids = array();
foreach ($categories as $cat_name) {
$cat_term = get_term_by('name', $cat_name, 'product_cat');
if (!$cat_term) {
$cat_term = wp_insert_term($cat_name, 'product_cat');
}
if (!is_wp_error($cat_term)) {
$cat_ids[] = is_array($cat_term) ? $cat_term['term_id'] : $cat_term->term_id;
}
}
$product->set_category_ids($cat_ids);
}
$product->save();
}
fclose($handle);
}
// Функция поиска продукта по SKU
function wplab_find_product_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 0;
}В этом примере:
- CSV файл должен содержать колонки
sku,name,price,description,categories(через | для нескольких категорий); - Если продукт с таким SKU есть, он обновляется, иначе создается новый;
- Категории создаются автоматически, если их нет;
- Можно добавить обработку изображений, атрибутов и вариаций.
Автоматизация запуска импорта через WP Cron
Чтобы импорт запускался автоматически, например, раз в сутки, используйте WP Cron:
add_action('wplab_daily_product_import', 'wplab_run_daily_import');
function wplab_run_daily_import() {
$csv_file = WP_CONTENT_DIR . '/uploads/import/products.csv';
wplab_import_products_from_csv($csv_file);
}
// Запускаем событие при активации темы или плагина
if (!wp_next_scheduled('wplab_daily_product_import')) {
wp_schedule_event(time(), 'daily', 'wplab_daily_product_import');
}Этот код добавляет ежедневное задание, которое вызывает импорт из указанного файла. Файл можно обновлять через FTP или иными способами.
Расширение функционала: импорт изображений и атрибутов
Для полноценного импорта товаров потребуется добавить обработку изображений и атрибутов. Пример загрузки изображения из URL и привязки к товару:
function wplab_set_product_image_from_url($product_id, $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)) {
error_log('WPLab Import: ошибка загрузки изображения '.$image_url);
return false;
}
// Создаем массив $_FILES
$file_array = array(
'name' => basename($image_url),
'tmp_name' => $tmp
);
$id = media_handle_sideload($file_array, $product_id);
if (is_wp_error($id)) {
@unlink($tmp);
error_log('WPLab Import: ошибка добавления изображения в медиа библиотеку');
return false;
}
set_post_thumbnail($product_id, $id);
return true;
}Вызывать эту функцию можно внутри цикла импорта, передавая URL изображения из CSV.
Для атрибутов нужно использовать методы WC_Product::get_attributes() и WC_Product::set_attributes(), создавая объекты WC_Product_Attribute с нужными значениями.
Рекомендации по безопасности и производительности
При импорте больших CSV файлов важно учитывать:
- Ограничения памяти и времени выполнения PHP. Используйте разбивку на части или WP CLI для запуска;
- Проверку и валидацию данных перед вставкой;
- Логирование ошибок для отладки;
- Резервное копирование базы перед массовыми изменениями.
Рассмотренный код — базовый пример, который можно развивать под конкретные задачи магазина.
Заключение
Автоматический импорт товаров из CSV в WooCommerce — мощный инструмент для эффективного управления каталогом. Используя как готовые плагины, так и собственные скрипты, можно настроить процесс под любые требования и обеспечить актуальность данных без лишних ручных операций.
Для расширения функционала можно обратить внимание на плагины с расширениями в WPShop, которые помогут упростить задачи импорта и управления товарами.