Автоматический импорт данных из YML в WordPress: практическое руководство

В современных интернет-магазинах и каталогах часто возникает необходимость автоматического импорта товаров или данных из файлов YML (Yandex Market Language). В этой статье мы подробно разберём, как настроить автоматический импорт из YML в WordPress, используя примеры кода и рекомендации. Это позволит поддерживать актуальность контента без дополнительного ручного труда.

Что такое YML и зачем нужен импорт в WordPress

YML — это специализированный XML-формат, разработанный для удобного обмена и передачи товарных данных между системами. Наиболее часто используется в России для выгрузки товаров в Яндекс.Маркет, а также для обмена данными с другими маркетплейсами и системами учёта.

Импорт данных из YML в WordPress позволяет:

  • Автоматически обновлять ассортимент товаров;
  • Сохранять структуру категорий и атрибутов;
  • Обновлять цены и наличие;
  • Экономить время контент-менеджеров.

Для этого нужно создать скрипт, который будет разбирать YML-файл, преобразовывать данные и создавать/обновлять записи в WordPress.

Обработка YML файла: парсинг и разбор данных

Для работы с YML в PHP удобно использовать встроенный класс SimpleXMLElement. Он позволяет легко парсить XML и получать доступ к элементам.

Пример базового парсинга YML:

function wpcore_parse_yml($file_path) {
    if (!file_exists($file_path)) {
        return false;
    }

    $xml_content = file_get_contents($file_path);
    $xml = simplexml_load_string($xml_content);
    if (!$xml) {
        return false;
    }

    $offers = [];
    foreach ($xml->shop->offers->offer as $offer) {
        $offers[] = [
            'id' => (string)$offer['id'],
            'name' => (string)$offer->name,
            'price' => (float)$offer->price,
            'categoryId' => (string)$offer->categoryId,
            'description' => (string)$offer->description
        ];
    }
    return $offers;
}

Здесь функция принимает путь к YML файлу, загружает и парсит его, возвращая массив с офферами (товарами).

Обработка категорий

Категории в YML тоже представлены в отдельном блоке. Для корректной структуры в WordPress нужно их обработать и создать соответствующие термины (например, категории таксономии "product_cat").

function wpcore_import_categories($xml) {
    foreach ($xml->shop->categories->category as $category) {
        $cat_id = (int)$category['id'];
        $parent_id = (int)$category['parentId'];
        $name = (string)$category;

        $args = [
            'slug' => 'category-' . $cat_id,
            'parent' => 0,
            'description' => '',
        ];

        if ($parent_id > 0) {
            $parent_term = get_term_by('slug', 'category-' . $parent_id, 'product_cat');
            if ($parent_term) {
                $args['parent'] = $parent_term->term_id;
            }
        }

        if (!term_exists($name, 'product_cat')) {
            wp_insert_term($name, 'product_cat', $args);
        }
    }
}

Эту функцию нужно вызывать перед импортом товаров, чтобы категории были готовы.

Создание и обновление товаров в WordPress

В WordPress товары обычно реализованы как кастомные типы записей, например, product для WooCommerce. Для создания записи используем функцию wp_insert_post. При повторном импорте нужно проверять наличие товара по уникальному ID из YML и обновлять данные.

function wpcore_import_offers($offers) {
    foreach ($offers as $offer) {
        $existing = get_posts([
            'post_type' => 'product',
            'meta_key' => 'wpcore_yml_id',
            'meta_value' => $offer['id'],
            'posts_per_page' => 1
        ]);

        $post_data = [
            'post_title' => $offer['name'],
            'post_content' => $offer['description'],
            'post_status' => 'publish',
            'post_type' => 'product'
        ];

        if ($existing) {
            $post_data['ID'] = $existing[0]->ID;
            $post_id = wp_update_post($post_data);
        } else {
            $post_id = wp_insert_post($post_data);
            add_post_meta($post_id, 'wpcore_yml_id', $offer['id'], true);
        }

        if ($post_id) {
            update_post_meta($post_id, '_price', $offer['price']);
            // Добавляем категорию товара
            wp_set_object_terms($post_id, intval($offer['categoryId']), 'product_cat');
        }
    }
}

Такой подход позволяет поддерживать товары в актуальном состоянии.

Автоматизация процесса с помощью WP-Cron

Чтобы импорт происходил регулярно, настроим WP-Cron — внутренний планировщик заданий WordPress.

Добавим задачу в файл функций темы или плагина:

add_action('wpcore_yml_import_event', 'wpcore_yml_import_cron');

function wpcore_yml_import_cron() {
    $file_path = WP_CONTENT_DIR . '/uploads/import.yml';
    $xml = simplexml_load_file($file_path);
    if (!$xml) return;

    wpcore_import_categories($xml);
    $offers = wpcore_parse_yml($file_path);
    if ($offers) {
        wpcore_import_offers($offers);
    }
}

if (!wp_next_scheduled('wpcore_yml_import_event')) {
    wp_schedule_event(time(), 'hourly', 'wpcore_yml_import_event');
}

Этот код создаст задачу, которая будет запускать импорт каждый час.

Готовые плагины для импорта YML

Если хочется упростить задачу, можно использовать готовые решения:

  • YML Importer — плагин с поддержкой автоматического импорта и обновления товаров из YML;
  • Clearfy Pro — оптимизатор с расширенными возможностями по управлению импортом;
  • WooCommerce Product CSV Import Suite — универсальный инструмент, который можно адаптировать под YML через конвертацию.

Использование плагинов ускоряет процесс, но понимание основ поможет гибко настроить импорт под любые задачи.

Отладка и рекомендации по безопасности

При создании автоматического импорта важно:

  • Обрабатывать ошибки парсинга и отсутствия файла;
  • Использовать nonce и права доступа для запуска импорта;
  • Резервировать базу перед массовым обновлением товаров;
  • Проверять корректность данных перед сохранением;
  • Логировать процесс для быстрой диагностики.

Правильный подход к импорту YML значительно упростит поддержку сайта и повысит качество данных.

WooCommerce: как автоматически удалять неактивные вариации товаров
22.05.2026
WooCommerce: как автоматически удалять отменённые и завершённые заказы по дате
24.04.2026
WordPress: как правильно использовать мета-записи для улучшения производительности
06.03.2026
Как автоматически отключать неиспользуемые плагины в WordPress
14.01.2026
Как создать персонализированные типы записей в WordPress
10.11.2025