WooCommerce — одна из самых популярных платформ для создания интернет-магазинов на WordPress. Часто возникает задача автоматического импорта продукции из внешних систем, поставщиков или ERP в формате XML. В этой статье мы разберем, как организовать такой импорт с помощью кода и плагинов, чтобы обновлять каталог товаров без ручного труда.
Зачем нужен автоматический импорт продукции в WooCommerce из XML
Если ваш магазин сотрудничает с поставщиками, которые предоставляют файлы с товарами в формате XML, ручной ввод данных становится крайне трудоемким и ошибочным. Автоматический импорт:
- Обеспечивает актуальность ассортимента и цен;
- Экономит время на обновление каталога;
- Позволяет быстро реагировать на изменения у поставщика;
- Уменьшает количество ошибок, связанных с ручным вводом.
Рассмотрим, как реализовать импорт XML с товарами в WooCommerce с помощью PHP-кода и разберем полезные плагины.
Как прочитать и распарсить XML файл в WordPress
Для начала нам нужно загрузить XML файл и разобрать его структуру. WordPress и PHP предоставляют класс SimpleXMLElement, который отлично подходит для работы с XML.
function wpmy_parse_xml_file($file_path) {
if (!file_exists($file_path)) {
return false;
}
$xml = simplexml_load_file($file_path);
if ($xml === false) {
return false;
}
return $xml;
}Этот код загружает XML и возвращает объект для дальнейшей обработки. Обычно в XML у вас есть теги с информацией о товарах — например, <product> с названием, описанием, ценой и т.д.
Создание товаров в WooCommerce через код
После парсинга данных нужно создать или обновить товары в WooCommerce. Для этого используем стандартные функции WooCommerce и WordPress.
function wpmy_create_or_update_product($product_data) {
$product_id = wc_get_product_id_by_sku($product_data['sku']);
if (!$product_id) {
$product = new WC_Product_Simple();
} else {
$product = wc_get_product($product_id);
}
$product->set_name($product_data['name']);
$product->set_sku($product_data['sku']);
$product->set_price($product_data['price']);
$product->set_regular_price($product_data['price']);
$product->set_description($product_data['description']);
$product->save();
return $product->get_id();
}Здесь мы ищем товар по SKU — уникальному идентификатору. Если товар найден, обновляем данные, если нет — создаем новый. В массиве $product_data должны быть ключи sku, name, price, description и другие необходимые поля.
Автоматизация импорта: запуск по расписанию с WP-Cron
Чтобы импорт обновлялся автоматически, можно настроить периодический запуск задачи через WP-Cron. Это позволит раз в определённое время загружать свежий XML и обновлять товары.
function wpmy_schedule_import() {
if (!wp_next_scheduled('wpmy_import_products_event')) {
wp_schedule_event(time(), 'hourly', 'wpmy_import_products_event');
}
}
add_action('wp', 'wpmy_schedule_import');
add_action('wpmy_import_products_event', 'wpmy_import_products_callback');
function wpmy_import_products_callback() {
$xml = wpmy_parse_xml_file(WP_CONTENT_DIR . '/uploads/products.xml');
if (!$xml) {
return;
}
foreach ($xml->product as $item) {
$data = [
'sku' => (string) $item->sku,
'name' => (string) $item->name,
'price' => (float) $item->price,
'description' => (string) $item->description,
];
wpmy_create_or_update_product($data);
}
}Этот код будет запускать импорт каждый час. Вы можете изменить интервал или добавить дополнительные проверки.
Полезные плагины для импорта XML в WooCommerce
Если вы не хотите писать код самостоятельно, можно использовать готовые решения:
- WooCommerce Product Feed PRO — мощный плагин для импорта и экспорта товаров, поддерживает XML и другие форматы.
- Woo Import Export — удобный инструмент для массового импорта и обновления товаров по XML и CSV.
- WP All Import с аддоном WooCommerce — популярный плагин для сложных импортов.
Использование плагинов подойдет, если вы не хотите углубляться в программирование, но готовы платить за расширенный функционал.
Особенности и рекомендации при импорте из XML
При работе с импортом учитывайте:
- Проверяйте структуру XML и корректность данных перед импортом;
- Обязательно используйте уникальные идентификаторы (SKU) для избегания дублирования;
- Настраивайте обработку ошибок и логирование — это поможет быстро выявлять проблемы;
- Тестируйте импорт на копии сайта, чтобы не повредить рабочий магазин;
- Если импорт большой, делайте разбиение на части, чтобы избежать таймаутов.
Также можно использовать плагин Clearfy Pro для оптимизации работы WooCommerce и ускорения импорта.
Пример расширения импорта: добавление изображений
Чтобы добавить изображения к товару из XML, вы можете скачать файл, загрузить его в медиа-библиотеку и привязать к товару:
function wpmy_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 = [
'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);
}Вызывайте эту функцию после создания товара, передавая URL изображения из XML.