В этой статье подробно разберём, как настроить автоматический импорт товаров из YML-файлов в WordPress. Формат YML часто используется для обмена товарами между маркетплейсами и интернет-магазинами. Если вы ведёте магазин на WordPress с WooCommerce или другим плагином для электронной коммерции, импорт из YML поможет регулярно обновлять ассортимент без ручного труда.
Что такое YML и зачем нужен автоматический импорт
YML — это формат XML, адаптированный для описания каталога товаров с их характеристиками, ценами, фотографиями и категориями. Как правило, поставщики или агрегаторы предоставляют YML-фид, который регулярно обновляется.
Ручной импорт неудобен, особенно если товаров сотни или тысячи. Автоматизация позволяет:
- Сэкономить время на обновлении каталога;
- Избежать ошибок при вводе данных;
- Поддерживать актуальность цен и наличия;
- Быстро реагировать на изменения у поставщика.
Для импорта можно использовать готовые плагины или написать собственное решение на PHP.
Готовые плагины для импорта YML в WordPress
Рассмотрим несколько популярных плагинов, которые поддерживают импорт из YML и подходят для WooCommerce и других магазинов:
- WPGPT Import YML — плагин с поддержкой гибкой настройки импорта, умеет обновлять товары и категории, подходит для сайтов на WooCommerce. Можно загрузить файл по URL или из локального хранилища.
- WooCommerce YML Import — простой и понятный плагин, поддерживает импорт описаний, изображений, цен и атрибутов.
- Expert Review CSV & YML Importer — расширенный инструмент с возможностью создания кастомных правил обработки данных и автоматизации.
Для установки плагина загрузите его через админку WordPress, активируйте и настройте URL вашего YML-фида, а также параметры обновления.
Как реализовать автоматический импорт YML с помощью кастомного кода
Если вы хотите больше контроля, можно написать функцию для импорта с использованием стандартных средств WordPress и PHP.
Пример функции для парсинга YML и импорта товаров в WooCommerce:
function wpset_import_yml_products($yml_url) {
$xml = simplexml_load_file($yml_url);
if (!$xml) return;
foreach ($xml->shop->offers->offer as $offer) {
$product_id = wc_get_product_id_by_sku((string)$offer['id']);
$product = $product_id ? wc_get_product($product_id) : new WC_Product_Simple();
$product->set_sku((string)$offer['id']);
$product->set_name((string)$offer->name);
$product->set_regular_price((string)$offer->price);
$product->set_description((string)$offer->description);
if (isset($offer->picture)) {
$image_url = (string)$offer->picture;
$attachment_id = wpset_media_sideload_image($image_url, 0, null, 'id');
if ($attachment_id) {
$product->set_image_id($attachment_id);
}
}
$product->save();
}
}
// Вспомогательная функция для загрузки изображения
function wpset_media_sideload_image($file, $post_id, $desc = null, $return = 'html') {
if (!function_exists('media_sideload_image')) {
require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');
}
return media_sideload_image($file, $post_id, $desc, $return);
}
Этот код загружает YML-фид, перебирает товары, проверяет по SKU, обновляет или создаёт новый товар, загружает картинку и сохраняет продукт.
Автоматизация запуска импорта через Cron
Для регулярного обновления каталога импорт нужно запускать автоматически. В WordPress можно настроить cron-задачу.
add_action('wpset_scheduled_import', 'wpset_cron_import_yml');
function wpset_cron_import_yml() {
$yml_url = 'https://example.com/catalog.yml';
wpset_import_yml_products($yml_url);
}
if (!wp_next_scheduled('wpset_scheduled_import')) {
wp_schedule_event(time(), 'hourly', 'wpset_scheduled_import');
}
Этот код запускает импорт каждые час, подставьте свой URL YML.
Советы по работе с импортом YML в WordPress
- Проверяйте структуру YML: разные поставщики используют немного отличающиеся схемы, адаптируйте парсер.
- Кешируйте результат загрузки: чтобы не нагружать сервер, сохраняйте файл локально и обновляйте по расписанию.
- Обрабатывайте ошибки: добавьте логирование неудачных попыток импорта.
- Оптимизируйте изображения: загружайте изображения с минимальным размером и используйте CDN.
- Используйте плагины для расширенной логики: например, Expert Review для фильтрации и дополнительной обработки.