Как создать автоматический импорт продуктов в WordPress

Автоматический импорт данных — одна из востребованных задач при работе с WordPress, особенно если сайт связан с каталогами товаров, прайс-листами или маркетплейсами. В этой статье рассмотрим, как реализовать автоматический импорт продуктов в WordPress с использованием WP Cron и REST API, а также приведём примеры кода для создания собственного решения без тяжелых плагинов.

Зачем нужен автоматический импорт продуктов в WordPress

Если вы ведёте интернет-магазин или сайт с каталогом товаров, часто возникает необходимость регулярно обновлять ассортимент, цены и другие данные. Ручное добавление и обновление товаров занимает много времени и подвержено ошибкам. Автоматизация процесса позволяет:

  • Экономить время на обновление базы товаров.
  • Избегать ошибок и дублирования.
  • Обеспечить актуальность информации для посетителей.
  • Интегрироваться с внешними системами и поставщиками.

При этом не всегда хочется устанавливать громоздкие плагины, если задача узкоспециализированная. К тому же, собственное решение даёт полный контроль над процессом.

Обзор способов реализации импорта товаров

Импорт можно реализовать разными методами:

  • Парсинг CSV, XML или JSON файлов с данными.
  • Получение данных через REST API поставщика.
  • Использование FTP или других протоколов для загрузки файлов.
  • Комбинация вышеперечисленного с автоматическим запуском через WP Cron.

В статье мы сосредоточимся на импорте через REST API и запуске процесса по расписанию через WP Cron — это современно, удобно и масштабируемо.

Настройка WP Cron для автоматического запуска импорта

WP Cron — внутренняя система планировщика задач WordPress. Она позволяет запускать функции по расписанию без необходимости ставить системный cron на сервере. Для автоматического запуска импорта создадим собственное событие.

Пример кода для регистрации и запуска Cron задачи:

add_action('wpunit_import_products_cron_hook', 'wpunit_import_products_cron_function');

function wpunit_activate_cron() {
    if (!wp_next_scheduled('wpunit_import_products_cron_hook')) {
        wp_schedule_event(time(), 'hourly', 'wpunit_import_products_cron_hook');
    }
}
register_activation_hook(__FILE__, 'wpunit_activate_cron');

function wpunit_deactivate_cron() {
    $timestamp = wp_next_scheduled('wpunit_import_products_cron_hook');
    wp_unschedule_event($timestamp, 'wpunit_import_products_cron_hook');
}
register_deactivation_hook(__FILE__, 'wpunit_deactivate_cron');

В этом коде мы регистрируем событие, которое будет срабатывать каждый час, вызывая функцию wpunit_import_products_cron_function. При активации плагина задача планируется, при деактивации — удаляется.

Реализация функции импорта через REST API

Допустим, поставщик предоставляет REST API с каталогом продуктов в формате JSON. Для примера возьмём URL https://example.com/api/products.

Функция импорта должна:

  • Получить данные с API.
  • Обработать и проверить данные.
  • Создать или обновить товары в WordPress (например, кастомный тип записи 'product').

Пример кода функции импорта:

function wpunit_import_products_cron_function() {
    $response = wp_remote_get('https://example.com/api/products');
    if (is_wp_error($response)) {
        error_log('WPUnit Import: Ошибка получения данных с API');
        return;
    }
    $body = wp_remote_retrieve_body($response);
    $products = json_decode($body, true);
    if (empty($products)) {
        error_log('WPUnit Import: Пустой ответ от API');
        return;
    }
    foreach ($products as $product) {
        // Проверяем обязательные поля
        if (empty($product['sku']) || empty($product['title'])) {
            continue;
        }
        // Ищем продукт по SKU
        $existing = get_posts([
            'post_type' => 'product',
            'meta_key' => 'sku',
            'meta_value' => $product['sku'],
            'posts_per_page' => 1
        ]);
        if ($existing) {
            $post_id = $existing[0]->ID;
            // Обновляем существующий товар
            wp_update_post([
                'ID' => $post_id,
                'post_title' => sanitize_text_field($product['title']),
                'post_status' => 'publish'
            ]);
        } else {
            // Создаем новый товар
            $post_id = wp_insert_post([
                'post_type' => 'product',
                'post_title' => sanitize_text_field($product['title']),
                'post_status' => 'publish'
            ]);
        }
        if ($post_id) {
            update_post_meta($post_id, 'sku', sanitize_text_field($product['sku']));
            update_post_meta($post_id, 'price', floatval($product['price'] ?? 0));
            update_post_meta($post_id, 'description', sanitize_textarea_field($product['description'] ?? ''));
        }
    }
}

В этом примере мы используем мета-поля для хранения SKU, цены и описания. Вы можете расширить список полей в зависимости от структуры вашего продукта.

Обработка ошибок и оптимизация процесса импорта

Для надёжной работы автоматического импорта важно предусмотреть обработку ошибок и логи:

  • Логируйте ошибки с помощью error_log или создайте собственный файл логов.
  • Добавьте ограничения по времени выполнения, чтобы задача не прерывалась.
  • Используйте пагинацию, если API возвращает большой объём данных.
  • Добавьте уведомления на email при критических ошибках.

К примеру, можно расширить функцию импорта, чтобы она выполнялась частями и запоминала прогресс в опциях WordPress.

Полезные плагины для автоматизации импорта и интеграции

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

  • WP Automatic — автоматический парсинг и импорт контента из разных источников, включая RSS, CSV, API.
  • Clearfy Pro — оптимизация и дополнительный функционал для сайта, включая инструменты для автоматизации.

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

Пример интеграции с кастомным типом записи и REST API

Для полноценного использования импорта создадим кастомный тип записи 'product' и добавим его в REST API:

function wpunit_register_product_cpt() {
    $args = [
        'label' => 'Продукты',
        'public' => true,
        'show_in_rest' => true,
        'supports' => ['title', 'editor', 'custom-fields'],
        'has_archive' => true
    ];
    register_post_type('product', $args);
}
add_action('init', 'wpunit_register_product_cpt');

Теперь продукты доступны в REST API WordPress по адресу /wp-json/wp/v2/product. Это позволяет интегрировать импорт и экспорт с любыми внешними системами.

Заключение по теме автоматического импорта товаров

Автоматизация импорта продуктов в WordPress — эффективный способ поддерживать сайт в актуальном состоянии и снизить ручной труд. Использование WP Cron и REST API позволяет строить гибкие и надежные решения. Если вы не хотите писать код, плагины с поддержкой импорта и планировщика задач помогут быстро стартовать.

Для детального изучения рекомендуем экспериментировать с кодом, расширять обработку данных и интегрировать дополнительные источники. А для удобства работы с импортом можно использовать плагин WP Automatic, который позволяет настроить гибкий импорт без глубоких знаний программирования.

Как автоматически проверять здоровье сайта WordPress с помощью WPUnit
16.04.2026
Как автоматизировать удаление спама в комментариях WordPress
29.03.2026
Успешная авторизация WordPress с использованием REST API
18.12.2025
Оптимальное использование хуков для отложенного запуска кода в WordPress
21.05.2026
Как создать автоматический импорт из Telegram в WordPress с помощью WPUnit
26.03.2026