Ведение интернет-магазина на WooCommerce часто требует регулярного обновления каталога товаров. Особенно актуальна задача автоматического импорта товаров из CSV-файлов, когда поставщик присылает обновления с ценами, описаниями и наличием. В этой статье разберём, как настроить автоматический импорт товаров из CSV в WooCommerce с помощью кода и плагинов, а также как избежать распространённых ошибок.
Почему автоматический импорт товаров из CSV важен для WooCommerce
Ручное добавление или обновление товаров — это долго и подвержено ошибкам. Автоматизация экономит время, снижает вероятность ошибок и позволяет быстро реагировать на изменения ассортимента или цен.
Однако стандартный WooCommerce не имеет встроенного механизма для автоматического импорта из CSV по расписанию. Для этого обычно используют сторонние плагины или пишут свои решения на PHP с использованием WP-Cron.
Плагины для автоматического импорта CSV в WooCommerce
Рассмотрим несколько плагинов, которые помогут автоматизировать импорт:
- WP All Import + WooCommerce Add-On — мощный плагин с удобным интерфейсом, поддерживает сложные схемы импорта, но платный.
- Product Import Export for WooCommerce — бесплатный плагин для простого импорта и экспорта товаров, однако автоматизация требует дополнительной настройки.
- Clearfy Pro — оптимизирует работу WooCommerce и включает некоторые инструменты для импорта, можно использовать в связке с кастомными скриптами.
Если нужна полная кастомизация и автоматический запуск по расписанию, часто удобнее написать собственный скрипт.
Пример скрипта для автоматического импорта товаров из CSV
Ниже пример функции для импорта товаров из CSV с использованием WP_Cron и стандартных функций WooCommerce. Предполагается, что CSV хранится на сервере и содержит колонки: SKU, Название, Цена, Описание, Статус (publish/draft).
function wpcatalog_import_products_from_csv() {
$csv_file = plugin_dir_path(__FILE__) . 'import/products.csv';
if (!file_exists($csv_file)) {
error_log('CSV файл для импорта не найден');
return;
}
$handle = fopen($csv_file, 'r');
if (!$handle) {
error_log('Не удалось открыть CSV файл');
return;
}
$header = fgetcsv($handle, 1000, ','); // читаем заголовок
while (($row = fgetcsv($handle, 1000, ',')) !== FALSE) {
$data = array_combine($header, $row);
if (empty($data['SKU'])) continue; // пропускаем без SKU
$product_id = wpcatalog_wc_get_product_id_by_sku($data['SKU']);
if ($product_id) {
// Обновляем существующий товар
$product = wc_get_product($product_id);
$product->set_name($data['Название']);
$product->set_regular_price($data['Цена']);
$product->set_description($data['Описание']);
$product->set_status($data['Статус']);
$product->save();
} else {
// Создаём новый товар
$new_product = new WC_Product_Simple();
$new_product->set_sku($data['SKU']);
$new_product->set_name($data['Название']);
$new_product->set_regular_price($data['Цена']);
$new_product->set_description($data['Описание']);
$new_product->set_status($data['Статус']);
$new_product->save();
}
}
fclose($handle);
}
function wpcatalog_wc_get_product_id_by_sku($sku) {
global $wpdb;
$product_id = $wpdb->get_var($wpdb->prepare(
"SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_sku' AND meta_value=%s LIMIT 1",
$sku
));
return $product_id ? intval($product_id) : 0;
}
// Регистрируем задачу в WP-Cron на ежедневный запуск
add_action('wpcatalog_daily_import', 'wpcatalog_import_products_from_csv');
if (!wp_next_scheduled('wpcatalog_daily_import')) {
wp_schedule_event(time(), 'daily', 'wpcatalog_daily_import');
}
Данный код можно добавить в functions.php вашей темы или оформить как отдельный плагин. Он ежедневно будет запускать функцию импорта из файла products.csv в папке плагина.
Разбор кода
Функция wpcatalog_import_products_from_csv открывает CSV, читает строки и по SKU пытается найти существующий товар. Если товар есть — обновляет его, если нет — создаёт новый. Для поиска товара по SKU используется отдельная функция wpcatalog_wc_get_product_id_by_sku.
Используется WP-Cron для запуска задачи автоматически. Для отладки можно вызвать функцию напрямую.
Советы по безопасности и производительности
При работе с большими CSV-файлами стоит:
- Разбивать импорт на части, чтобы избежать превышения лимитов по памяти и времени выполнения.
- Добавить логирование ошибок и успешных операций, чтобы отслеживать процесс импорта.
- Очищать кэш WooCommerce после импорта, если используется.
- Использовать временные файлы и проверять права доступа к ним.
Если CSV обновляется часто, имеет смысл добавлять проверку хэша файла, чтобы не выполнять импорт без изменений.
Интеграция с плагином Clearfy Pro для оптимизации
Плагин Clearfy Pro поможет оптимизировать работу WooCommerce и снизить нагрузку на сайт во время запуска импортов. В связке с кастомным скриптом Clearfy позволяет отключить ненужные скрипты на страницах, что повышает стабильность.
Выводы
Автоматический импорт товаров из CSV в WooCommerce — задача вполне решаемая с помощью кастомного кода и WP-Cron. Использование готовых плагинов подходит для большинства случаев, но если нужны тонкие настройки и интеграция в бизнес-процессы, лучше реализовать собственный скрипт.
Обязательно тестируйте импорт на тестовой среде, чтобы избежать потери данных и ошибок. Следите за логами и оптимизируйте код по мере роста каталога.