В интернет-магазинах на WordPress регулярный импорт товаров из внешних источников — частая задача. Особенно она актуальна, если ассортимент обновляется часто, или вы работаете с несколькими поставщиками. В этой статье подробно разберём, как автоматизировать импорт продуктов в WordPress с помощью популярных плагинов и кастомного кода.
Почему автоматический импорт продуктов важен для интернет-магазина на WordPress
Вручную добавлять или обновлять сотни и тысячи товаров — долго и рискованно с точки зрения ошибок. Автоматизация позволяет:
- Сэкономить время на рутинных операциях;
- Обеспечить актуальность данных в каталоге;
- Минимизировать человеческие ошибки;
- Упростить работу с несколькими поставщиками;
- Автоматически обновлять остатки и цены.
WPWeb рекомендует использовать проверенные инструменты и при необходимости дополнять их кастомными решениями.
Выбор плагина для автоматического импорта продуктов
Для начала рассмотрим несколько популярных плагинов, которые позволяют настроить импорт из CSV, XML и API.
WP All Import
Один из самых мощных и гибких плагинов для WordPress. Позволяет импортировать товары WooCommerce, назначать произвольные поля, атрибуты, категории и многое другое.
Плюсы: гибкость, поддержка любых форматов, регулярный импорт по расписанию.
Минусы: платная версия нужна для импорта в WooCommerce.
Produkty Importer
Простой в использовании плагин, который хорошо подходит для быстрого запуска импорта из CSV файлов. Поддерживает автоматический запуск по cron.
Custom API Import
Если поставщик предоставляет API, можно использовать плагины вроде WP Webhooks или написать свой плагин для обращения к API и добавления товаров.
Пример автоматического импорта через WP All Import с расписанием
Рассмотрим, как настроить импорт CSV с помощью WP All Import и запускать его по расписанию для обновления товаров.
- Установите и активируйте плагин WP All Import.
- Создайте импорт, загрузив CSV файл с товарами.
- Настройте сопоставление полей CSV с полями WooCommerce.
- В разделе «Cron Scheduling» включите автоматический запуск импорта, указав удобный интервал.
Это позволит автоматически обновлять товары без вашего участия.
Кастомное решение: импорт товаров из CSV с автоматическим запуском
Если нужен более узкий функционал или интеграция с нестандартным источником, можно написать свой код. Например, создадим функцию, которая импортирует товары из CSV и настроим её на автоматический запуск по WordPress cron.
function wpweb_import_products_from_csv() {
$csv_file = plugin_dir_path(__FILE__) . 'import/products.csv';
if (!file_exists($csv_file)) {
return;
}
if (($handle = fopen($csv_file, 'r')) !== false) {
$header = fgetcsv($handle, 1000, ',');
while (($data = fgetcsv($handle, 1000, ',')) !== false) {
$product_data = array_combine($header, $data);
// Проверяем, есть ли товар с таким артикулом
$existing = get_posts(array(
'post_type' => 'product',
'meta_key' => 'sku',
'meta_value' => $product_data['sku'],
'posts_per_page' => 1
));
if ($existing) {
$product_id = $existing[0]->ID;
$product = wc_get_product($product_id);
} else {
$product = new WC_Product_Simple();
}
$product->set_name($product_data['name']);
$product->set_regular_price($product_data['price']);
$product->set_sku($product_data['sku']);
$product->set_description($product_data['description']);
$product->set_stock_quantity(intval($product_data['stock']));
$product->save();
}
fclose($handle);
}
}
// Регистрируем событие, если его ещё нет
if (!wp_next_scheduled('wpweb_import_products_cron')) {
wp_schedule_event(time(), 'hourly', 'wpweb_import_products_cron');
}
// Навешиваем функцию на событие
add_action('wpweb_import_products_cron', 'wpweb_import_products_from_csv');В этом примере мы считываем CSV с товарами, обновляем или создаём товары WooCommerce, и запускаем импорт каждый час.
Как настроить импорт изображений и атрибутов
При импорте товаров важно не забывать про изображения и атрибуты. В WP All Import это делается через интерфейс, а в коде нужно реализовать загрузку и привязку изображений.
Например, добавим в функцию импорт изображений из URL:
function wpweb_import_product_image($product, $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)) {
return;
}
$file_array = array(
'name' => basename($image_url),
'tmp_name' => $tmp
);
$id = media_handle_sideload($file_array, 0);
if (is_wp_error($id)) {
@unlink($file_array['tmp_name']);
return;
}
$product->set_image_id($id);
$product->save();
}Вызывать эту функцию можно внутри основного цикла импорта, передавая URL изображения из CSV.
Проверка и отладка автоматического импорта
После настройки автоматического импорта важно тщательно проверить:
- Корректность полей и типов данных;
- Правильное обновление существующих товаров;
- Обработку ошибок при загрузке и парсинге;
- Логи cron-заданий (можно расширить код логированием в файл или базу).
Если используете кастомный код, рекомендуем добавлять обработку исключений и уведомления по email в случае сбоев.
Рекомендации по безопасности и производительности
Автоматический импорт — потенциально ресурсозатратная операция. Чтобы не навредить сайту:
- Запускайте импорт в off-peak часы;
- Ограничьте количество товаров в одной итерации (если большой каталог);
- Обязательно делайте бэкапы базы перед запуском;
- Следите за обновлениями плагинов и WordPress для совместимости;
- Используйте WP Webhooks или WPRemark для расширения функционала автоматизации.