Ведение интернет-магазина на WooCommerce часто требует массового добавления или обновления товаров. Ручной ввод занимает много времени и подвержен ошибкам. Особенно если каталоги товаров регулярно обновляются поставщиками в формате CSV. В этой статье мы подробно разберём, как организовать автоматический импорт продуктов из CSV в WooCommerce с помощью готовых плагинов и собственных скриптов на PHP.
Почему автоматический импорт из CSV важен для WooCommerce
WooCommerce из коробки позволяет импортировать товары через админку, но этот процесс требует ручного запуска и не подходит для регулярного обновления каталога. Автоматизация импорта позволяет:
- Экономить время на обновлении ассортимента;
- Поддерживать актуальные цены и наличие;
- Избегать ошибок при вводе данных;
- Интегрировать каталог с системами поставщиков или ERP.
Для реализации автоматического импорта можно использовать несколько подходов: плагины с функцией cron, кастомные PHP-скрипты или их комбинацию.
Плагины для автоматического импорта CSV в WooCommerce
Существуют специализированные плагины, которые умеют импортировать CSV по расписанию и поддерживают разные форматы. Рассмотрим наиболее популярные:
1. WP All Import + WooCommerce Add-On
Очень мощный плагин для импорта любых данных в WordPress и WooCommerce. Позволяет настроить импорт по расписанию через WP-Cron, поддерживает сложные сопоставления полей, вариативные товары, изображения.
Настройка расписания импортов делается в интерфейсе, можно указать URL файла CSV или загружать вручную.
Ссылка для изучения и покупки: WP All Import на WPShop
2. Product CSV Import Suite
Официальный пугин от WooCommerce для расширенного импорта товаров. Позволяет импортировать сложные структуры товаров, атрибуты, вариации и метаданные.
Поддерживает автоматический импорт из файла, но для расписания потребуются дополнительные настройки.
3. WP Ultimate CSV Importer
Многофункциональный импортер с поддержкой WooCommerce. Позволяет создавать расписания импорта, обрабатывать любые поля и настраивать обновление товаров.
Пример кода для простого импорта CSV с использованием WP-Cron
Если вы хотите реализовать импорт самостоятельно, можно написать простой скрипт на PHP, который будет запускаться по cron или WP-Cron.
Ниже пример функции wpdemo_import_products_from_csv(), которая читает CSV и создаёт товары:
function wpdemo_import_products_from_csv() {
$csv_file = plugin_dir_path(__FILE__) . 'import/products.csv';
if (!file_exists($csv_file)) {
error_log('CSV файл не найден: ' . $csv_file);
return;
}
if (($handle = fopen($csv_file, 'r')) !== false) {
$header = fgetcsv($handle, 1000, ',');
while (($data = fgetcsv($handle, 1000, ',')) !== false) {
$row = array_combine($header, $data);
// Проверка обязательных полей
if (empty($row['sku']) || empty($row['name'])) continue;
// Проверяем есть ли товар с таким SKU
$existing_product_id = wc_get_product_id_by_sku($row['sku']);
if ($existing_product_id) {
// Обновляем существующий товар
$product = wc_get_product($existing_product_id);
} else {
// Создаём новый товар
$product = new WC_Product_Simple();
}
$product->set_name($row['name']);
$product->set_sku($row['sku']);
$product->set_price($row['price']);
$product->set_regular_price($row['price']);
$product->set_stock_quantity(intval($row['stock']));
$product->set_stock_status($row['stock'] > 0 ? 'instock' : 'outofstock');
$product->save();
}
fclose($handle);
}
}
// Добавим событие в WP-Cron для ежедневного запуска
add_action('wpdemo_daily_import', 'wpdemo_import_products_from_csv');
if (!wp_next_scheduled('wpdemo_daily_import')) {
wp_schedule_event(time(), 'daily', 'wpdemo_daily_import');
}
В этом скрипте из CSV с колонками sku,name,price,stock импортируются или обновляются товары. Для более сложных товаров нужно расширять логику.
Обработка изображений и атрибутов при импорте
Частая задача — загрузка изображений для товаров из URL, указанных в CSV. Ниже пример функции для загрузки изображения и прикрепления к товару:
function wpdemo_import_product_image($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('Ошибка скачивания изображения: ' . $image_url);
return;
}
$file_array = array(
'name' => basename($image_url),
'tmp_name' => $tmp
);
// Загружаем файл в Медиатеку
$attachment_id = media_handle_sideload($file_array, $product_id);
if (is_wp_error($attachment_id)) {
@unlink($tmp);
error_log('Ошибка загрузки изображения: ' . $image_url);
return;
}
// Устанавливаем главное изображение товара
set_post_thumbnail($product_id, $attachment_id);
}
Используйте эту функцию внутри цикла импорта для каждого товара, если в CSV есть поле с URL изображения.
Импорт атрибутов и категорий
Для импорта атрибутов и категорий нужно предварительно зарегистрировать нужные таксономии в WooCommerce. Затем можно привязывать термины к товарам через функции:
$product->set_category_ids(array($category_id1, $category_id2));
$product->set_attributes(array(
'pa_color' => array(
'name' => 'pa_color',
'options' => array('red', 'blue'),
'position' => 0,
'visible' => true,
'variation' => false
)
));
Подробнее про работу с атрибутами читайте в документации WooCommerce.
Резюме и рекомендации
Автоматический импорт из CSV в WooCommerce — важная задача для эффективного управления магазином. Готовые плагины, такие как WP All Import, позволяют быстро настроить импорт с минимальным кодом. Если нужен полный контроль, можно писать собственные функции на PHP, используя WP-Cron для расписания и стандартные функции WooCommerce для создания и обновления товаров.
Не забывайте обрабатывать изображения, атрибуты и категории, чтобы каталог выглядел полноценно. Тестируйте импорт на тестовом сайте, чтобы избежать ошибок на живом магазине.