Автоматическая сборка курсов из разных источников в WordPress

Для образовательных сайтов на WordPress часто возникает потребность объединить курсы, размещённые на разных платформах или источниках, в единый каталог. В этой статье мы подробно рассмотрим, как автоматизировать сборку и обновление курсов из нескольких источников, используя стандартные инструменты WordPress, REST API и полезные плагины.

Почему важна автоматизация сбора курсов из разных источников

Ручное добавление курсов требует много времени и часто приводит к ошибкам и устареванию данных. Автоматизация позволяет:

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

На практике автоматизация особенно актуальна, если курсы размещены на внешних платформах, например, на Moodle, Udemy, собственных LMS с API или в формате XML/JSON.

Подготовка и выбор инструментов для автоматической сборки курсов

Для реализации задачи нам понадобятся следующие компоненты:

  • Кастомный тип записи (Custom Post Type) для курсов.
  • REST API для получения данных с внешних источников.
  • Плагин для импорта и синхронизации данных, например WPRemark или Quizle.
  • Дополнительные инструменты для обработки данных, например, WP-Cron для автоматического запуска импорта по расписанию.

Создадим кастомный тип записи для курсов, если он ещё не создан:

function wpfreecourses_register_course_cpt() {
    $labels = array(
        '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 = array(
        'labels' => $labels,
        'public' => true,
        'has_archive' => true,
        'supports' => array('title', 'editor', 'thumbnail', 'custom-fields'),
        'show_in_rest' => true
    );

    register_post_type('wpfreecourses_course', $args);
}
add_action('init', 'wpfreecourses_register_course_cpt');

Получение данных курсов из внешних источников через REST API

Для примера возьмём внешний источник с REST API, возвращающий список курсов в формате JSON. Обычно API предоставляет данные по URL с параметрами пагинации и фильтрации.

Пример запроса и обработки ответа:

function wpfreecourses_fetch_courses_from_api($api_url) {
    $response = wp_remote_get($api_url);
    if (is_wp_error($response)) {
        return false;
    }
    $body = wp_remote_retrieve_body($response);
    $data = json_decode($body, true);
    if (empty($data)) {
        return false;
    }
    return $data['courses'] ?? [];
}

Далее нужно обработать полученные данные и сохранить их в базе WordPress как записи нашего типа «Курс».

Импорт и обновление курсов в WordPress

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

function wpfreecourses_import_or_update_course($course_data) {
    $external_id = sanitize_text_field($course_data['id']);
    $existing = get_posts(array(
        'post_type' => 'wpfreecourses_course',
        'meta_key' => 'wpfreecourses_external_id',
        'meta_value' => $external_id,
        'posts_per_page' => 1
    ));

    $post_data = array(
        'post_title' => sanitize_text_field($course_data['title']),
        'post_content' => wp_kses_post($course_data['description']),
        'post_status' => 'publish',
        'post_type' => 'wpfreecourses_course'
    );

    if (!empty($existing)) {
        $post_data['ID'] = $existing[0]->ID;
        $post_id = wp_update_post($post_data);
    } else {
        $post_id = wp_insert_post($post_data);
        if ($post_id) {
            update_post_meta($post_id, 'wpfreecourses_external_id', $external_id);
        }
    }

    return $post_id;
}

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

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

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

function wpfreecourses_import_event_handler() {
    $courses = wpfreecourses_fetch_courses_from_api('https://example.com/api/courses');
    if ($courses) {
        foreach ($courses as $course) {
            wpfreecourses_import_or_update_course($course);
        }
    }
}
add_action('wpfreecourses_hourly_import', 'wpfreecourses_import_event_handler');

Таким образом вы получите полностью автоматизированный процесс обновления каталога курсов на вашем сайте.

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

Если вы хотите сэкономить время и мощно расширить функционал, рассмотрите плагины, которые облегчают импорт и отображение курсов:

  • WPRemark — помогает организовать отзывы и рейтинги для курсов, что повышает доверие пользователей.
  • Quizle — позволяет создавать интерактивные тесты и квизы, которые можно интегрировать с импортированными курсами.

Эти плагины легко интегрируются с кастомным типом записей и расширяют возможности сайта.

Обработка ошибок и логирование при импорте курсов

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

function wpfreecourses_log_error($message) {
    if (defined('WP_DEBUG') && WP_DEBUG) {
        error_log('[WPFreeCourses] ' . $message);
    }
}

В местах, где возможны ошибки, вызывайте wpfreecourses_log_error() для записи информации.

Обработка ошибок при запросе API

$response = wp_remote_get($api_url);
if (is_wp_error($response)) {
    wpfreecourses_log_error('Ошибка при запросе API: ' . $response->get_error_message());
    return false;
}

Валидация данных курсов

Перед сохранением данных всегда проверяйте обязательные поля, например, название и уникальный ID. Если данные некорректны — также логируйте это.

Подведение итогов и рекомендации

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

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

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

Автоматическое разделение длинных постов в WordPress
29.01.2026
Как автоматически создавать отзывы о курсах в WordPress
18.03.2026
Как создать массивный импорт курсов в WordPress с помощью AJAX и REST API
25.01.2026
WooCommerce: как автоматически отключить отгрузку заказа после оплаты
19.05.2026
Как использовать хук WooCommerce order status change для автоматизации
26.04.2026