Автоматизация импорта товаров в WooCommerce особенно актуальна для интернет-магазинов с большим ассортиментом, часто обновляющимся каталогом или при интеграции с внешними системами. В этой статье разберём, как с помощью PHP и WordPress API создавать автоматический импорт продуктов из CSV-файла, избегая при этом громоздких плагинов и сохраняя гибкость в настройках.
Почему стоит автоматизировать импорт продуктов в WooCommerce
Вручную загружать товары через админ-панель удобно только при небольшом каталоге. Когда же сотни или тысячи позиций меняются ежедневно, это становится непрактично и требует много времени. Автоматический импорт позволяет:
- Экономить время на обновлениях каталога;
- Избежать ошибок при ручном вводе данных;
- Интегрироваться с поставщиками, которые предоставляют данные в формате CSV;
- Гибко настраивать логику обработки продуктов.
Подготовка CSV-файла и структура данных
Для корректного импорта важно, чтобы CSV-файл содержал все необходимые поля для создания товара в WooCommerce. Минимальный набор полей:
sku— уникальный артикул;name— название товара;description— описание;regular_price— цена;stock_quantity— количество на складе;categories— категории через запятую;images— ссылки на изображения через запятую.
Структура может расширяться в зависимости от потребностей (атрибуты, мета-поля, вариации и т.д.).
Создание функции автоматического импорта продуктов из CSV
Пример функции wpbook_import_products_from_csv, которая читает CSV, проверяет наличие товара по артикулу и создаёт или обновляет его.
function wpbook_import_products_from_csv($csv_file_path) {
if (!file_exists($csv_file_path)) {
error_log('CSV файл не найден: ' . $csv_file_path);
return;
}
$handle = fopen($csv_file_path, 'r');
if (!$handle) {
error_log('Не удалось открыть CSV файл.');
return;
}
$header = fgetcsv($handle);
if (!$header) {
error_log('CSV файл пуст или некорректен.');
fclose($handle);
return;
}
while (($row = fgetcsv($handle)) !== false) {
$data = array_combine($header, $row);
if (!$data || empty($data['sku'])) continue; // SKU обязателен
$product_id = wc_get_product_id_by_sku($data['sku']);
if ($product_id) {
$product = wc_get_product($product_id);
} else {
$product = new WC_Product_Simple();
$product->set_sku($data['sku']);
}
$product->set_name($data['name']);
$product->set_description($data['description']);
$product->set_regular_price($data['regular_price']);
$product->set_stock_quantity((int)$data['stock_quantity']);
$product->set_manage_stock(true);
$product->set_stock_status($data['stock_quantity'] > 0 ? 'instock' : 'outofstock');
// Обработка категорий
if (!empty($data['categories'])) {
$categories = array_map('trim', explode(',', $data['categories']));
$cat_ids = [];
foreach ($categories 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[] = is_array($term) ? $term['term_id'] : $term->term_id;
}
}
$product->set_category_ids($cat_ids);
}
$product->save();
// Загрузка и прикрепление изображений
if (!empty($data['images'])) {
$image_urls = array_map('trim', explode(',', $data['images']));
$attachment_ids = [];
foreach ($image_urls as $image_url) {
$attachment_id = wpbook_import_image_from_url($image_url, $product->get_id());
if ($attachment_id) {
$attachment_ids[] = $attachment_id;
}
}
if (!empty($attachment_ids)) {
$product->set_image_id($attachment_ids[0]);
if (count($attachment_ids) > 1) {
$product->set_gallery_image_ids(array_slice($attachment_ids, 1));
}
$product->save();
}
}
}
fclose($handle);
}
function wpbook_import_image_from_url($image_url, $post_id) {
if (empty($image_url)) return false;
$upload_dir = wp_upload_dir();
$image_data = @file_get_contents($image_url);
if (!$image_data) return false;
$filename = basename($image_url);
if (wp_mkdir_p($upload_dir['path'])) {
$file = $upload_dir['path'] . '/' . $filename;
} else {
$file = $upload_dir['basedir'] . '/' . $filename;
}
file_put_contents($file, $image_data);
$wp_filetype = wp_check_filetype($filename, null);
$attachment = array(
'post_mime_type' => $wp_filetype['type'],
'post_title' => sanitize_file_name($filename),
'post_content' => '',
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment($attachment, $file, $post_id);
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attach_data = wp_generate_attachment_metadata($attach_id, $file);
wp_update_attachment_metadata($attach_id, $attach_data);
return $attach_id;
}
Пояснения к коду
Функция wpbook_import_products_from_csv открывает CSV, читает построчно данные, ищет продукт по SKU и обновляет или создаёт новый продукт. Для категорий проверяется наличие термина, иначе создаётся новый. Изображения загружаются и прикрепляются к продукту.
Автоматизация запуска импорта через WP-Cron
Чтобы импорт происходил автоматически, можно настроить WP-Cron. Добавим задачу, которая будет запускать импорт, например, раз в сутки.
add_action('wpbook_daily_product_import', 'wpbook_daily_import_handler');
function wpbook_schedule_daily_import() {
if (!wp_next_scheduled('wpbook_daily_product_import')) {
wp_schedule_event(time(), 'daily', 'wpbook_daily_product_import');
}
}
add_action('wp', 'wpbook_schedule_daily_import');
function wpbook_daily_import_handler() {
$csv_path = WP_CONTENT_DIR . '/uploads/products-import.csv';
wpbook_import_products_from_csv($csv_path);
}
Теперь, если положить обновленный CSV в указанную папку, импорт будет выполняться автоматически каждый день.
Советы по улучшению и расширению импорта
- Добавьте логирование ошибок и успешных импортов для контроля;
- Реализуйте обработку вариативных продуктов и атрибутов с помощью
WC_Product_Variable; - Оптимизируйте загрузку изображений, чтобы не дублировать уже загруженные файлы;
- Если используете плагин Clearfy Pro, можно дополнительно ускорить работу и очистить базу от лишних данных.
Использование готовых плагинов для импорта CSV
Если вы хотите более простой способ без программирования, рекомендуем обратить внимание на плагины:
- WP All Import — мощный и гибкий импорт CSV/XML с поддержкой WooCommerce;
- Product CSV Import Suite — официальный плагин WooCommerce;
- WP Ultimate CSV Importer — бесплатный и платный функционал, поддержка пользовательских полей.
Однако для сложных или специфичных задач программный импорт даёт больше контроля и интеграции.
Заключение
Автоматический импорт продуктов из CSV в WooCommerce позволяет существенно упростить управление магазином и держать каталог всегда актуальным. Используя предложенный код и методики, вы сможете настроить гибкий и надежный процесс импорта без лишних затрат и зависимости от сторонних сервисов.