Автоматизация генерации отчётов — важная задача для многих сайтов на WordPress, особенно если нужно регулярно собирать данные и отправлять их пользователям или администраторам. В этой статье подробно разберём, как создать автоматические отчёты с помощью встроенного планировщика задач WP-Cron и PHP, а также рассмотрим примеры полезных плагинов и куски кода, которые можно использовать для своих проектов.
Что такое WP-Cron и почему его стоит использовать для автоматизации отчётов
WP-Cron — это имитация системного cron, встроенная в WordPress. Она позволяет выполнять задачи по расписанию без необходимости доступа к серверному cron. Это удобно, когда у вас нет доступа к серверным настройкам, но нужно запускать задачи, например, генерацию отчётов, очистку кэша, рассылку писем и так далее.
WP-Cron работает на основе посещений сайта — при первом же визите после запланированного времени запускается нужное действие. Это стоит учитывать при планировании, чтобы задачи не запускались с задержками.
Для создания автоматических отчётов WP-Cron отлично подходит, потому что:
- Не требует дополнительной настройки сервера.
- Легко интегрируется в существующий код WordPress.
- Позволяет гибко настроить периодичность выполнения задач.
Недостатки WP-Cron
Главный минус — зависимость от посещений сайта. Если трафика мало, задачи могут задерживаться. Для критичных задач лучше настроить системный cron с вызовом wp-cron.php.
Пошаговое создание автоматического отчёта с WP-Cron
Рассмотрим пример: нам нужно ежедневно собирать статистику по заказам и отправлять отчёт на e-mail администратору.
1. Добавляем задачу в расписание WP-Cron
Для начала зарегистрируем новое событие, если оно ещё не зарегистрировано.
function wpcalc_register_cron_event() {
if ( ! wp_next_scheduled( 'wpcalc_daily_report_event' ) ) {
wp_schedule_event( time(), 'daily', 'wpcalc_daily_report_event' );
}
}
add_action( 'wp', 'wpcalc_register_cron_event' );Здесь мы проверяем, не запланировано ли уже событие wpcalc_daily_report_event, и если нет — создаём ежедневный запуск.
2. Создаём функцию обработки события
Теперь напишем функцию, которая будет формировать отчёт и отправлять его.
function wpcalc_generate_and_send_report() {
// Получаем заказы за последние 24 часа (пример с WooCommerce)
$args = [
'limit' => -1,
'status' => 'completed',
'date_created' => '>' . ( time() - DAY_IN_SECONDS ),
];
$orders = wc_get_orders( $args );
$total_sales = 0;
$orders_count = count($orders);
foreach ( $orders as $order ) {
$total_sales += $order->get_total();
}
$message = "Отчёт по заказам за последние 24 часа:\n";
$message .= "Всего заказов: " . $orders_count . "\n";
$message .= "Общая сумма продаж: " . wc_price( $total_sales ) . "\n";
wp_mail( get_option('admin_email'), 'Ежедневный отчёт по заказам', $message );
}
add_action( 'wpcalc_daily_report_event', 'wpcalc_generate_and_send_report' );В этом коде мы используем функции WooCommerce для получения заказов, считаем их количество и сумму, формируем текст письма и отправляем на e-mail администратора сайта.
3. Добавляем очистку при деактивации плагина или темы
Чтобы не оставлять запланированные задачи после удаления кода, добавим очистку при деактивации:
function wpcalc_deactivate_cleanup() {
$timestamp = wp_next_scheduled( 'wpcalc_daily_report_event' );
if ( $timestamp ) {
wp_unschedule_event( $timestamp, 'wpcalc_daily_report_event' );
}
}
register_deactivation_hook( __FILE__, 'wpcalc_deactivate_cleanup' );Расширяем функционал: создание отчёта в файле и прикрепление к письму
Отправка простого текста подходит не всегда. Часто нужно сформировать отчёт в формате CSV или PDF для удобства анализа.
Генерация CSV отчёта
Пример создания CSV-файла с заказами:
function wpcalc_generate_csv_report( $orders ) {
$csv = "ID,Дата,Сумма\n";
foreach ( $orders as $order ) {
$csv .= $order->get_id() . ',' . $order->get_date_created()->date('Y-m-d H:i:s') . ',' . $order->get_total() . "\n";
}
return $csv;
}Далее в функции отправки отчёта сохраним файл во временную директорию и прикрепим к письму:
function wpcalc_generate_and_send_report_with_attachment() {
$args = [
'limit' => -1,
'status' => 'completed',
'date_created' => '>' . ( time() - DAY_IN_SECONDS ),
];
$orders = wc_get_orders( $args );
$csv_content = wpcalc_generate_csv_report( $orders );
$upload_dir = wp_upload_dir();
$file_path = $upload_dir['basedir'] . '/daily_order_report.csv';
file_put_contents( $file_path, $csv_content );
$to = get_option('admin_email');
$subject = 'Ежедневный отчёт по заказам с вложением CSV';
$message = 'Во вложении файл с отчётом по заказам за последние 24 часа.';
$headers = [];
$attachments = [$file_path];
wp_mail( $to, $subject, $message, $headers, $attachments );
// Можно удалить файл после отправки
unlink($file_path);
}
add_action( 'wpcalc_daily_report_event', 'wpcalc_generate_and_send_report_with_attachment' );Полезные плагины для расширения возможностей автоматических отчётов
Если не хочется писать весь код самостоятельно, можно использовать плагины, которые помогут:
- WP Crontrol — позволяет управлять задачами WP-Cron через админку, смотреть расписание и добавлять свои события без кода.
- Advanced Cron Manager — расширенный менеджер cron, удобен для отладки и контроля.
- WP Reports — плагин для создания отчётов по аналитике и другим данным с возможностью планирования.
Также для создания отчётов с визуализацией можно использовать плагин Expert Review от WPSHOP, который позволяет строить отчёты и обзоры с автоматическим обновлением данных.
Советы по оптимизации и безопасности автоматических отчётов
При автоматизации важно учитывать нагрузку на сервер и безопасность:
- Не ставьте слишком частый запуск задач — достаточно раз в сутки или по необходимости.
- Проверяйте, что в отчётах нет конфиденциальных данных, если письма уходят внешним адресатам.
- Используйте nonce и права доступа, если отчёты можно запускать вручную через интерфейс.
- Логируйте ошибки и успешные запуски для диагностики.
Используйте функции WordPress для отправки почты и работы с файлами, это снижает риск ошибок и повышает совместимость.
Итог
Автоматические отчёты — мощный инструмент для мониторинга и анализа данных на сайте WordPress. Использование WP-Cron и PHP позволяет организовать гибкую и удобную систему без зависимости от внешних сервисов и сложных настроек сервера. Приведённые примеры помогут быстро внедрить базовую функциональность и расширять её под свои задачи.