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

Диагностика задачи: зачем нужна автоматизация отчетов в LearnPress

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

Как определить необходимость автоматизации?

  • Регулярность отчетов: нужно ли получать их ежедневно, еженедельно или по окончании курса?
  • Количество курсов и учеников: если их много, ручной сбор затруднителен.
  • Наличие дополнительных данных: например, результаты тестов, прохождение уроков, оценки.

Пошаговое решение: автоматический экспорт отчетов LearnPress в CSV

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

Шаг 1. Создаем базовую структуру плагина

<?php
/**
 * Plugin Name: LearnPress Auto Reports Export
 * Description: Автоматический экспорт отчетов LearnPress в CSV
 * Version: 1.0
 * Author: Your Name
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}

// Запускаем и регистрируем крон
register_activation_hook(__FILE__, 'lpa_register_cron');
register_deactivation_hook(__FILE__, 'lpa_clear_cron');

function lpa_register_cron() {
    if ( ! wp_next_scheduled( 'lpa_daily_export_hook' ) ) {
        wp_schedule_event( time(), 'daily', 'lpa_daily_export_hook' );
    }
}

function lpa_clear_cron() {
    wp_clear_scheduled_hook( 'lpa_daily_export_hook' );
}

add_action( 'lpa_daily_export_hook', 'lpa_export_reports' );

Шаг 2. Собираем данные о прохождении курсов

Функция lpa_export_reports получает данные о завершаемых курсах за последние сутки и формирует CSV.

function lpa_export_reports() {
    global $wpdb;

    $date_from = date('Y-m-d 00:00:00', strtotime('-1 day'));
    $date_to = date('Y-m-d 23:59:59', strtotime('-1 day'));

    // Получаем завершенные курсы за вчера
    $results = $wpdb->get_results( $wpdb->prepare(
        "SELECT user_id, course_id, timestamp
        FROM {$wpdb->prefix}learnpress_user_items
        WHERE item_type = 'lp_course' 
        AND status = 'completed'
        AND timestamp BETWEEN %s AND %s",
        $date_from,
        $date_to
    ) );

    if ( empty($results) ) {
        return; // Нет данных для экспорта
    }

    $csv_data = [];
    $csv_data[] = ['User ID', 'User Email', 'Course ID', 'Course Title', 'Completion Date'];

    foreach ($results as $row) {
        $user = get_userdata($row->user_id);
        $course = learn_press_get_course($row->course_id);
        $csv_data[] = [
            $row->user_id,
            $user ? $user->user_email : 'unknown',
            $row->course_id,
            $course ? $course->get_title() : 'unknown',
            date('Y-m-d H:i:s', $row->timestamp)
        ];
    }

    // Путь для сохранения файла
    $upload_dir = wp_upload_dir();
    $file_path = $upload_dir['basedir'] . '/learnpress_reports/report_' . date('Y-m-d', strtotime('-1 day')) . '.csv';

    if ( ! file_exists( dirname($file_path) ) ) {
        wp_mkdir_p( dirname($file_path) );
    }

    $fp = fopen($file_path, 'w');
    foreach ($csv_data as $fields) {
        fputcsv($fp, $fields);
    }
    fclose($fp);
}

Шаг 3. Настраиваем отправку отчета на email

Добавим отправку сформированного CSV-отчета на email администратора сайта.

add_action( 'lpa_daily_export_hook', 'lpa_send_report_email', 20 );

function lpa_send_report_email() {
    $upload_dir = wp_upload_dir();
    $file_path = $upload_dir['basedir'] . '/learnpress_reports/report_' . date('Y-m-d', strtotime('-1 day')) . '.csv';

    if ( ! file_exists($file_path) ) {
        return; // Файл не найден
    }

    $to = get_option('admin_email');
    $subject = 'Отчет LearnPress за ' . date('Y-m-d', strtotime('-1 day'));
    $message = 'Во вложении отчет о завершенных курсах за вчерашний день.';

    $headers = ['Content-Type: text/html; charset=UTF-8'];

    wp_mail( $to, $subject, $message, $headers, [$file_path] );
}

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

Для проверки работы автоматического экспорта и отправки:

  • Вручную запустите крон-событие: do_action('lpa_daily_export_hook'); в functions.php или через WP CLI.
  • Проверьте наличие файла CSV в папке wp-content/uploads/learnpress_reports/ с именем вида report_YYYY-MM-DD.csv.
  • Убедитесь, что на почту администратора пришло письмо с вложением.
  • Откройте CSV и проверьте корректность данных (ID пользователя, email, название курса, дата завершения).

Частые ошибки и как их исправить

  • Пустой файл CSV или отсутствие данных: Проверьте, что в базе LearnPress есть курсы со статусом completed за нужный период. Статус и поле timestamp должны быть актуальны.
  • Проблемы с правами на запись в папку uploads: Убедитесь, что папка wp-content/uploads/learnpress_reports/ существует и доступна для записи сервером.
  • Письмо не отправляется: Проверьте настройки SMTP в WordPress. Для надежной почтовой доставки рекомендуем использовать сторонние SMTP-плагины (например, WP Mail SMTP).
  • Крон не срабатывает: Проверьте, активирован ли WP Cron и нет ли конфликтов с другими плагинами. Для теста можно использовать плагин WP Crontrol.

Практические советы по безопасности и производительности

  • Храните отчеты в отдельной папке с доступом только для администратора (например, через robots.txt и .htaccess).
  • Не держите старые отчеты дольше 30 дней — создайте задачу удаления устаревших файлов.
  • Если объем данных большой, разбивайте экспорт на части по курсам или пользователям для снижения нагрузки.
  • Реализуйте кэширование запроса к базе данных, если отчеты собираются часто.

Сравнение вариантов решения задачи

МетодОписаниеПлюсыМинусы
Плагин CSV ExportИспользование готового плагина для экспорта LearnPressБыстрое внедрение, интерфейсМожет не поддерживать нужные поля, ограниченная кастомизация
Собственный плагин с WP CronАвтоматический экспорт и отправка по расписаниюПолный контроль, гибкость, интеграция с почтойТребует навыков разработки, поддержка
Ручной экспорт из админкиВыгрузка отчетов вручную через интерфейс LearnPressПростота, не требует кодаНеэффективно при большом объеме, риск ошибок

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

⭐⭐⭐⭐⭐
Как создать свой шорткод в LearnPress для расширения функционала
09.11.2025
Как добавить поле дополнительные данные в форму регистрации LearnPress
05.11.2025
Как использовать хуки и фильтры в LearnPress для расширения функционала
14.11.2025
Как создать автоматические отчёты в LearnPress с помощью WPRemark
30.03.2026
Как решить проблему конфликта AJAX в LearnPress на WordPress
06.12.2025
×
WPShop
партнерка без «но»!

До 3225₽ за каждую продажу

Подключиться к игре