Диагностика задачи: зачем нужна автоматизация отчетов в 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 | Простота, не требует кода | Неэффективно при большом объеме, риск ошибок |