Как автоматизировать создание курсов в LearnPress через импорт CSV

Если вы управляете образовательной платформой на WordPress с плагином LearnPress, рано или поздно столкнетесь с задачей массового создания курсов. Вручную добавлять сотни курсов через админку неудобно и занимает много времени. В этой статье мы подробно разберём, как автоматизировать процесс создания курсов в LearnPress с помощью импорта CSV-файлов и собственного кода. Это решение сэкономит часы работы и позволит легко обновлять каталог курсов.

Почему стоит использовать импорт CSV для создания курсов в LearnPress

CSV (Comma-Separated Values) — это формат текстовых файлов, в котором данные представлены в виде таблицы, разделённой запятыми или другим разделителем. Такой файл легко формировать в Excel или Google Sheets, а затем загружать на сайт.

Преимущества использования CSV импорта для LearnPress:

  • Массовое создание и обновление курсов одним действием.
  • Возможность подготовить данные офлайн и загрузить их на сайт.
  • Удобство для администраторов и контент-менеджеров без технических знаний.
  • Гибкость — можно импортировать не только название и описание, но и категории, цены, уроки и другие параметры.

Для реализации импорта нам понадобится написать собственный скрипт на PHP, использующий возможности WordPress и LearnPress API.

Подготовка CSV-файла для импорта курсов

Для начала создайте файл с необходимыми колонками, например:

title,description,price,category_slug,lessons_titles,lessons_content

Где:

  • title — название курса.
  • description — описание курса (можно в HTML).
  • price — стоимость курса в рублях.
  • category_slug — слаг категории, к которой относится курс.
  • lessons_titles — заголовки уроков, разделённые точкой с запятой.
  • lessons_content — содержимое уроков, также разделённое точкой с запятой в том же порядке.

Пример строки CSV:

"Веб-разработка для начинающих","Курс по основам HTML, CSS и JS",1500,web-dev,"Введение;HTML основы;CSS основы","Текст урока 1;Текст урока 2;Текст урока 3"

Важно: количество уроков в lessons_titles и lessons_content должно совпадать.

Создание функции для импорта курсов из CSV в LearnPress

Далее создадим в файле functions.php вашей темы или в отдельном плагине код, который обработает CSV и создаст курсы с уроками.

function learnpressru_import_courses_from_csv($csv_file_path) {
    if (!file_exists($csv_file_path)) {
        return new WP_Error('file_not_found', 'CSV файл не найден');
    }

    $handle = fopen($csv_file_path, 'r');
    if (!$handle) {
        return new WP_Error('file_open_error', 'Не удалось открыть CSV файл');
    }

    $header = fgetcsv($handle, 0, ',');
    if (!$header) {
        fclose($handle);
        return new WP_Error('empty_file', 'CSV файл пустой');
    }

    while (($row = fgetcsv($handle, 0, ',')) !== false) {
        $data = array_combine($header, $row);

        // Создаём курс
        $course_id = learnpressru_create_course($data);
        if (is_wp_error($course_id)) {
            // Можно логировать ошибки
            continue;
        }
    }
    fclose($handle);
    return true;
}

function learnpressru_create_course($data) {
    // Проверяем обязательные поля
    if (empty($data['title']) || empty($data['description'])) {
        return new WP_Error('missing_data', 'Не указаны обязательные поля title или description');
    }

    // Создаём пост курса
    $course_post = array(
        'post_title'    => wp_strip_all_tags($data['title']),
        'post_content'  => $data['description'],
        'post_status'   => 'publish',
        'post_type'     => 'lp_course',
    );

    $course_id = wp_insert_post($course_post);
    if (is_wp_error($course_id) || $course_id == 0) {
        return new WP_Error('course_create_failed', 'Ошибка создания курса');
    }

    // Устанавливаем категорию курса
    if (!empty($data['category_slug'])) {
        $term = get_term_by('slug', $data['category_slug'], 'course_category');
        if ($term) {
            wp_set_object_terms($course_id, $term->term_id, 'course_category');
        }
    }

    // Устанавливаем цену
    if (!empty($data['price'])) {
        update_post_meta($course_id, '_lp_price', floatval($data['price']));
    }

    // Создаём уроки
    if (!empty($data['lessons_titles']) && !empty($data['lessons_content'])) {
        $titles = explode(';', $data['lessons_titles']);
        $contents = explode(';', $data['lessons_content']);

        if (count($titles) === count($contents)) {
            foreach ($titles as $index => $title) {
                learnpressru_create_lesson($course_id, trim($title), trim($contents[$index]));
            }
        }
    }

    return $course_id;
}

function learnpressru_create_lesson($course_id, $title, $content) {
    $lesson_post = array(
        'post_title'    => wp_strip_all_tags($title),
        'post_content'  => $content,
        'post_status'   => 'publish',
        'post_type'     => 'lp_lesson',
    );

    $lesson_id = wp_insert_post($lesson_post);
    if ($lesson_id && !is_wp_error($lesson_id)) {
        // Связываем урок с курсом
        update_post_meta($lesson_id, '_lp_course', $course_id);
        // Добавляем урок в порядок уроков курса
        $curr_lessons = get_post_meta($course_id, '_lp_lessons', true);
        if (!$curr_lessons) {
            $curr_lessons = array();
        }
        $curr_lessons[] = $lesson_id;
        update_post_meta($course_id, '_lp_lessons', $curr_lessons);
    }
    return $lesson_id;
}

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

Как использовать функцию импорта на практике

Чтобы запустить импорт, загрузите CSV-файл на сервер (например, в папку wp-content/uploads/) и вызовите функцию:

learnpressru_import_courses_from_csv(ABSPATH . 'wp-content/uploads/courses.csv');

Для удобства можно реализовать админ-панель с загрузкой файла или использовать WP Cron для периодического импорта, если CSV обновляется регулярно.

Пример добавления кнопки импорта в админку WordPress

Добавим простую страницу в меню, где можно загрузить CSV и вызвать импорт:

add_action('admin_menu', function() {
    add_submenu_page('learn_press', 'Импорт курсов CSV', 'Импорт CSV', 'manage_options', 'learnpressru-csv-import', 'learnpressru_csv_import_page');
});

function learnpressru_csv_import_page() {
    if (isset($_POST['submit_csv_import']) && !empty($_FILES['csv_file']['tmp_name'])) {
        $result = learnpressru_import_courses_from_csv($_FILES['csv_file']['tmp_name']);
        if ($result === true) {
            echo '<div class="updated notice"><p>Импорт успешно выполнен.</p></div>';
        } else {
            echo '<div class="error notice"><p>' . esc_html($result->get_error_message()) . '</p></div>';
        }
    }
    ?>
    <h2>Импорт курсов LearnPress из CSV</h2>
    <form method="post" enctype="multipart/form-data">
        <input type="file" name="csv_file" accept=".csv" required>
        <input type="submit" name="submit_csv_import" class="button button-primary" value="Импортировать">
    </form>
    <?php
}

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

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

2. Логирование ошибок. Для больших импортов полезно сохранять информацию о неудачных записях в лог-файл.

3. Оптимизация производительности. При импорте большого количества курсов рекомендуется использовать WP CLI или разбивать импорт на части, чтобы избежать таймаутов.

4. Дополнительные поля. Если вы используете кастомные поля LearnPress или сторонних плагинов, можно расширить CSV и функцию импорта, добавив их поддержку.

5. Использование плагинов. Если хотите готовое решение, обратите внимание на плагины импорта контента, совместимые с LearnPress, например, WP All Import с кастомными настройками. Однако собственный скрипт даёт больше контроля и гибкости.

Заключение по автоматизации создания курсов через CSV

Автоматизация создания курсов через импорт CSV значительно упрощает управление образовательной платформой на LearnPress. Используя приведённый пример кода, вы сможете быстро создавать курсы с уроками, настраивать категории и цены. Такой подход подходит как для разовых массовых загрузок, так и для регулярного обновления каталога курсов. Если хотите расширить функционал, можно интегрировать этот код с плагинами WPRemark для создания отчетов, Quizle для вопросов или OmniVideo для видеоуроков, что сделает вашу платформу ещё мощнее.

Для удобства скачайте готовый пример импорта CSV и скрипт с официального сайта WPSHOP.RU.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как установить и настроить OmniVideo для LearnPress: пошаговое руководство
27.01.2026
Как автоматизировать создание учебных материалов в LearnPress с помощью плагинов и кода
20.12.2025
Как добавить автоматические отчёты в LearnPress с помощью WPRemark
05.04.2026
Как добавить разные типы вопросов в Quizle для LearnPress
20.02.2026
Как сделать отсрочку оплаты в LearnPress: пошаговое решение с примерами кода
29.12.2025
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее