Автоматизация задач — важный инструмент для эффективного управления сайтом на WordPress. Одной из таких задач является создание автоматических отчётов, которые могут включать статистику, аудит контента или показатели посещаемости. В этой статье разберём, как реализовать автоматическую генерацию и отправку отчётов с помощью системного Cron и встроенного WP-Cron. Также рассмотрим примеры кода и полезные плагины.
Основы работы с Cron и WP-Cron в WordPress
Для автоматического запуска кода по расписанию используются задачи Cron — это системный планировщик задач в Unix-системах. Однако на хостингах не всегда есть доступ к системному Cron, поэтому WordPress реализует собственный механизм — WP-Cron, который запускается при посещении сайта.
WP-Cron удобен и прост в настройке, но зависит от трафика сайта, что может привести к задержкам запуска задач. Если у вас есть доступ к серверу, системный Cron предпочтительнее для стабильной работы.
Что такое WP-Cron и как он работает
WP-Cron — это имитация системного планировщика задач, которая проверяет наличие запланированных событий при каждом запросе к сайту. Если задача должна выполниться, она запускается.
Для управления WP-Cron используются функции wp_schedule_event(), wp_clear_scheduled_hook() и хуки add_action().
Настройка системного Cron для WordPress
Для запуска WP-Cron через системный Cron рекомендуется отключить автоматический запуск WP-Cron, добавив в wp-config.php строку:
define('DISABLE_WP_CRON', true);Затем настроить системный Cron на выполнение файла wp-cron.php каждую минуту или по нужному расписанию:
* * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1Пример: создание автоматического отчёта и отправка на email
Рассмотрим пример, как с помощью WP-Cron создать задачу, которая раз в день будет формировать отчёт и отправлять его администратору сайта.
Шаг 1. Регистрация задачи при инициализации темы или плагина
function wpstudy_schedule_daily_report() {
if ( ! wp_next_scheduled( 'wpstudy_send_daily_report' ) ) {
wp_schedule_event( time(), 'daily', 'wpstudy_send_daily_report' );
}
}
add_action( 'wp', 'wpstudy_schedule_daily_report' );Функция wpstudy_schedule_daily_report проверяет, есть ли уже запланированная задача с хуком wpstudy_send_daily_report>. Если нет, то создаёт её с повторным запуском ежедневно.
Шаг 2. Создание функции-обработчика для отправки отчёта
function wpstudy_send_daily_report_callback() {
$admin_email = get_option( 'admin_email' );
$subject = 'Ежедневный отчёт сайта wpstudy.ru';
// Формируем тело отчёта
$post_count = wp_count_posts()->publish;
$user_count = count_users()['total_users'];
$message = "Отчёт за сегодня:\n";
$message .= "Опубликованных записей: $post_count\n";
$message .= "Всего пользователей: $user_count\n";
// Отправка письма
wp_mail( $admin_email, $subject, $message );
}
add_action( 'wpstudy_send_daily_report', 'wpstudy_send_daily_report_callback' );Здесь мы получаем количество опубликованных постов и пользователей, формируем текст сообщения и отправляем на почту администратора.
Шаг 3. Проверка и отладка
Для тестирования можно временно изменить период задачи на 'hourly' или вызвать функцию вручную:
wpstudy_send_daily_report_callback();Также полезно подключить плагины для управления WP-Cron, например WP Crontrol, который позволяет просматривать и управлять запланированными событиями через админку.
Расширение функционала: отчёты в формате PDF и отправка через SMTP
Для более сложных отчётов можно генерировать PDF-файлы с помощью библиотек, например, TCPDF или mPDF. После генерации файл прикрепляется к письму.
Чтобы отправка почты была надёжной, рекомендуется использовать SMTP-сервисы. Плагин WP Mail SMTP поможет настроить почту через SMTP-серверы Gmail, SendGrid, Mailgun и другие.
Пример генерации PDF с помощью mPDF
require_once __DIR__ . '/vendor/autoload.php';
function wpstudy_generate_pdf_report() {
$mpdf = new \Mpdf\Mpdf();
$html = '<h1>Ежедневный отчёт</h1>';
$html .= '<p>Дата: ' . date('Y-m-d') . '</p>';
$html .= '<p>Количество записей: ' . wp_count_posts()->publish . '</p>';
$mpdf->WriteHTML($html);
$file = WP_CONTENT_DIR . '/uploads/daily-report-' . date('Ymd') . '.pdf';
$mpdf->Output($file, 'F');
return $file;
}В функции создаётся PDF-файл с отчётом, который можно прикрепить к письму.
Полезные плагины для автоматизации отчётов и задач Cron
- WP Crontrol — управление WP-Cron из админки, просмотр и удаление задач.
- Advanced Cron Manager — расширенные функции управления задачами Cron.
- WP Mail SMTP — настройка отправки писем через SMTP.
- WP-CLI — запуск задач и управление сайтом через консоль, удобно для автоматизации.
Используйте эти инструменты для удобного контроля и расширения функционала автоматических отчётов.
Заключение: когда использовать системный Cron, а когда WP-Cron
Если у вас мало трафика или важна точность выполнения задач, лучше использовать системный Cron — он запускается по расписанию вне зависимости от посещаемости сайта. Для большинства сайтов с достаточной посещаемостью WP-Cron вполне подходит и проще в настройке.
Для отключения системного Cron и активации WP-Cron можно управлять настройками в wp-config.php и на уровне хостинга.
Автоматические отчёты — мощный инструмент для мониторинга и развития сайта. Реализовав их с помощью Cron и WP-Cron, вы сэкономите время и получите ценные данные без лишних усилий.