Автоматический импорт продуктов в WooCommerce — частая задача для владельцев интернет-магазинов на WordPress. Особенно когда товары обновляются регулярно, а ручной ввод данных слишком трудозатратен. В этой статье мы разберем, как организовать автоматический импорт товаров из CSV-файла с помощью PHP-кода, а также рассмотрим полезные плагины, которые облегчат эту задачу.
Почему стоит автоматизировать импорт товаров из CSV в WooCommerce
Ручной ввод данных: занимает много времени, подвержен ошибкам. Частые обновления каталога требуют регулярного обновления товаров. Импорт из CSV позволяет быстро загрузить сотни и тысячи товаров, сохраняя структуру и атрибуты.
Автоматизация снижает затраты на обслуживание магазина, минимизирует человеческий фактор и позволяет интегрировать магазин с внешними системами учета.
Обзор популярных плагинов для импорта CSV в WooCommerce
1. WP All Import — мощный плагин с визуальным конструктором импорта, поддерживает сложные структуры и кастомные поля. Есть бесплатная и платная версия.
2. Product CSV Import Suite — официальный плагин WooCommerce, который расширяет стандартный импорт товаров, поддерживает вариации, атрибуты и мета-поля.
3. Really Simple CSV Importer — легковесное решение для базового импорта, подойдет для простых каталогов.
Для автоматизации с помощью кода можно использовать хуки WooCommerce и WP Cron для регулярного запуска импорта.
Создаем автоматический импорт из CSV через код: пошаговое руководство
Рассмотрим пример функции wphow_import_woocommerce_products_from_csv(), которая загружает CSV, разбирает строки и создает или обновляет товары.
Подготовка CSV файла
- CSV должен содержать основные поля: SKU, название, описание, цена, категория, изображение.
- Поля должны быть разделены запятыми или точкой с запятой.
- Пример заголовков: sku, name, description, price, category, image_url
Пример кода для импорта
function wphow_import_woocommerce_products_from_csv($file_path) {
if (!file_exists($file_path)) {
error_log('CSV файл не найден: ' . $file_path);
return;
}
$handle = fopen($file_path, 'r');
if (!$handle) return;
$header = fgetcsv($handle);
while (($row = fgetcsv($handle)) !== false) {
$data = array_combine($header, $row);
$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['price']);
// Категория
if (!empty($data['category'])) {
$term = term_exists($data['category'], 'product_cat');
if (!$term) {
$term = wp_insert_term($data['category'], 'product_cat');
}
if (!is_wp_error($term)) {
$product->set_category_ids(array($term['term_id'] ?? $term['term_id']));
}
}
$product->save();
// Добавление изображения
if (!empty($data['image_url'])) {
wphow_set_product_image($product->get_id(), $data['image_url']);
}
}
fclose($handle);
}
function wphow_set_product_image($product_id, $image_url) {
$upload_dir = wp_upload_dir();
$image_data = file_get_contents($image_url);
$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, $product_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);
set_post_thumbnail($product_id, $attach_id);
}
Этот код обрабатывает CSV, создает или обновляет продукты, назначает категории и устанавливает изображение. Для запуска импорта можно добавить вызов этой функции в cron-задачу или вручную из админки.
Автоматизация запуска импорта с помощью WP Cron
Чтобы импорт происходил регулярно, например, раз в сутки, добавим WP Cron событие:
add_action('wphow_daily_import', 'wphow_run_import');
function wphow_run_import() {
$file = WP_CONTENT_DIR . '/uploads/products.csv';
wphow_import_woocommerce_products_from_csv($file);
}
if (!wp_next_scheduled('wphow_daily_import')) {
wp_schedule_event(time(), 'daily', 'wphow_daily_import');
}
Не забудьте разместить CSV файл по указанному пути или изменить путь в коде.
Дополнительные советы по работе с импортом CSV в WooCommerce
- Валидация данных: Перед импортом проверяйте корректность CSV, чтобы избежать ошибок.
- Логирование: Добавьте логирование успешных и неудачных импортов для отладки.
- Безопасность: Ограничьте доступ к файлу CSV и ручному запуску импорта.
- Использование плагинов: Если код кажется сложным, используйте WP All Import с настройками для автоматизации.
Использование плагина WP All Import с автоматическим обновлением
Плагин WP All Import позволяет настроить импорт из CSV и даже запускать его по расписанию. Для этого нужно связать плагин с WP Cron и настроить URL обновления файла CSV с внешнего сервера.
Такой подход особенно удобен, если товары поставляются из 1С или другой ERP-системы, где CSV обновляется автоматически.
Заключение по теме
Автоматический импорт товаров WooCommerce из CSV — важная задача для динамичных магазинов. Варианты решения варьируются от простого кода до мощных плагинов. Используйте представленные в статье примеры для создания надежного процесса обновления каталога, экономящего время и ресурсы.