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

Для сайтов с образовательным контентом, таких как wpfreecourses.ru, актуальной задачей является автоматизация процесса добавления новых курсов. Ручное добавление становится невозможным при большом объеме информации. В этой статье разберём, как организовать автоматический импорт курсов в WordPress из внешних источников, например, через REST API, XML или CSV файлы, а также рассмотрим полезные плагины и практические примеры кода.

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

Автоматизация импорта позволяет:

  • Экономить время на ручном вводе данных.
  • Обеспечить актуальность контента — новые курсы появляются сразу после обновления в источнике.
  • Уменьшить ошибки, связанные с ручным копированием информации.
  • Поддерживать большой каталог курсов без увеличения штатных ресурсов.

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

Обзор популярных плагинов для импорта курсов

1. WP All Import + WP All Import Pro

Очень мощный плагин для импорта данных из CSV, XML и других форматов. Позволяет создавать сложные правила сопоставления полей и импортировать курсы как настраиваемые записи.

Подробнее о WP All Import на WPShop

2. Import any XML or CSV File to WordPress

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

3. WP Ultimate CSV Importer

Поддерживает импорт из CSV в различные типы записей, в том числе кастомные типы и таксономии. Есть возможность автоматического запуска через WP Cron.

Создание собственного решения для автоматического импорта курсов

Подготовка кастомного типа записи для курсов

Для начала рекомендуем зарегистрировать собственный тип записи wpfreecourses_register_post_type_courses() для хранения курсов. Это позволит удобно работать с импортируемыми данными.

function wpfreecourses_register_post_type_courses() {
    $labels = [
        'name'               => 'Курсы',
        'singular_name'      => 'Курс',
        'add_new'            => 'Добавить курс',
        'add_new_item'       => 'Добавить новый курс',
        'edit_item'          => 'Редактировать курс',
        'new_item'           => 'Новый курс',
        'view_item'          => 'Просмотр курса',
        'search_items'       => 'Поиск курсов',
        'not_found'          => 'Курсы не найдены',
        'not_found_in_trash' => 'В корзине курсы не найдены',
        'menu_name'          => 'Курсы'
    ];
    $args = [
        'labels'             => $labels,
        'public'             => true,
        'has_archive'        => true,
        'supports'           => ['title', 'editor', 'thumbnail', 'custom-fields'],
        'show_in_rest'       => true,
    ];
    register_post_type('course', $args);
}
add_action('init', 'wpfreecourses_register_post_type_courses');

Получение данных из внешнего API

Для примера возьмём REST API внешнего сервиса, предоставляющего список курсов в формате JSON. Используем функцию wpfreecourses_fetch_courses_data(), которая загружает данные и возвращает массив курсов.

function wpfreecourses_fetch_courses_data() {
    $response = wp_remote_get('https://externalapi.example.com/courses');
    if (is_wp_error($response)) {
        return [];
    }
    $body = wp_remote_retrieve_body($response);
    $data = json_decode($body, true);
    if (json_last_error() !== JSON_ERROR_NONE) {
        return [];
    }
    return $data['courses'] ?? [];
}

Обработка и сохранение курсов в WordPress

Далее реализуем функцию wpfreecourses_import_courses(), которая перебирает полученный массив, проверяет уникальность по метаполю (например, ID курса во внешней системе) и создаёт или обновляет запись.

function wpfreecourses_import_courses() {
    $courses = wpfreecourses_fetch_courses_data();
    foreach ($courses as $course) {
        $external_id = sanitize_text_field($course['id']);
        $existing = new WP_Query([
            'post_type'  => 'course',
            'meta_key'   => 'external_course_id',
            'meta_value' => $external_id,
            'fields'     => 'ids',
            'posts_per_page' => 1
        ]);
        $post_data = [
            'post_title'   => sanitize_text_field($course['title']),
            'post_content' => wp_kses_post($course['description']),
            'post_status'  => 'publish',
            'post_type'    => 'course'
        ];
        if ($existing->have_posts()) {
            $post_id = $existing->posts[0];
            $post_data['ID'] = $post_id;
            wp_update_post($post_data);
        } else {
            $post_id = wp_insert_post($post_data);
        }
        if ($post_id) {
            update_post_meta($post_id, 'external_course_id', $external_id);
            update_post_meta($post_id, 'course_price', floatval($course['price']));
            // Можно добавить сохранение других метаданных
        }
    }
}

Автоматизация запуска импорта через WP Cron

Чтобы импорт выполнялся регулярно, настроим WP Cron. Добавим расписание и хук.

function wpfreecourses_cron_schedules( $schedules ) {
    if (!isset($schedules['hourly'])) {
        $schedules['hourly'] = [
            'interval' => 3600,
            'display'  => 'Каждый час'
        ];
    }
    return $schedules;
}
add_filter('cron_schedules', 'wpfreecourses_cron_schedules');

function wpfreecourses_schedule_import() {
    if (!wp_next_scheduled('wpfreecourses_import_hook')) {
        wp_schedule_event(time(), 'hourly', 'wpfreecourses_import_hook');
    }
}
add_action('wp', 'wpfreecourses_schedule_import');

add_action('wpfreecourses_import_hook', 'wpfreecourses_import_courses');

Дополнительные рекомендации и полезные плагины

Оптимизация производительности при большом объёме данных

Импорт большого количества курсов может сильно нагрузить сервер. Рекомендуется разбивать импорт на порции (batch processing), использовать транзиенты для кеширования и оптимизировать запросы в базе.

Плагины для поддержки кастомных полей и таксономий

Если курсы содержат много метаданных, стоит использовать Advanced Custom Fields (ACF) — это сильно упрощает работу с дополнительными полями. Импорт можно интегрировать с ACF, записывая данные в нужные поля.

Использование WPGPT для автоматического создания описаний курсов

Плагин WPGPT позволяет генерировать уникальные описания курсов на основе кратких данных, что повышает качество контента и SEO.

Выводы

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

WooCommerce: как автоматически отключить отгрузку заказа после оплаты
19.05.2026
Как безопасно удалить старые версии плагинов WordPress и освободить место
09.02.2026
Как избежать конфликтов между плагинами WordPress: практические советы и примеры кода
09.11.2025
WooCommerce: как автоматически отключать товары после завершения продаж
19.06.2026
Как защитить WordPress от bruteforce-атак с помощью плагинов и кода
22.02.2026