Автоматизация создания отчетов — важная задача для сайтов на WordPress, особенно если нужно регулярно получать сводную информацию о работе сайта или статистику для клиентов. В этой статье подробно расскажу, как настроить автоматическую генерацию и отправку отчетов, используя встроенный планировщик заданий WP-Cron и REST API WordPress.
Что такое WP-Cron и почему он нужен для автоматических отчетов
WP-Cron — это виртуальный планировщик заданий WordPress, который позволяет выполнять задачи по расписанию. В отличие от системного cron, WP-Cron запускается при обращении к сайту, но с помощью сторонних решений можно настроить его на регулярный запуск. Это идеальный инструмент для автоматизации таких задач, как отправка отчетов, очистка базы, обновления и многое другое.
Используя WP-Cron, мы можем задать регулярное выполнение функции, которая будет формировать отчет и, например, отправлять его по электронной почте или записывать в файл.
Как добавить кастомное расписание для WP-Cron
По умолчанию WP-Cron поддерживает только стандартные интервалы: час, двенадцать часов, день. Для более частых или редких запусков можно добавить свое расписание:
function wpgen_add_custom_cron_schedule($schedules) {
$schedules['every_five_minutes'] = array(
'interval' => 300, // 300 секунд = 5 минут
'display' => __('Каждые 5 минут')
);
return $schedules;
}
add_filter('cron_schedules', 'wpgen_add_custom_cron_schedule');Эта функция добавляет интервал с именем every_five_minutes, который можно использовать при планировании событий.
Создание задачи WP-Cron для генерации отчета
После добавления интервала нужно зарегистрировать событие, если оно ещё не зарегистрировано:
function wpgen_schedule_report_event() {
if (!wp_next_scheduled('wpgen_generate_report_hook')) {
wp_schedule_event(time(), 'every_five_minutes', 'wpgen_generate_report_hook');
}
}
add_action('wp', 'wpgen_schedule_report_event');Здесь мы проверяем, запланировано ли уже событие с хук-именем wpgen_generate_report_hook, и если нет — создаём его с интервалом каждые 5 минут.
Далее нужно повесить обработчик на это событие:
add_action('wpgen_generate_report_hook', 'wpgen_generate_report_function');
function wpgen_generate_report_function() {
// Логика генерации отчета
}Пример генерации простого отчета
Для примера создадим отчет с количеством опубликованных постов и отправим его на email администратора:
function wpgen_generate_report_function() {
$post_count = wp_count_posts()->publish;
$date = date('Y-m-d H:i:s');
$report = "Отчет на $date:\nОпубликовано записей: $post_count";
wp_mail(get_option('admin_email'), 'Автоматический отчет WPGen', $report);
}Разумеется, здесь можно расширить логику — добавить другие данные, формировать HTML-отчет или вложения.
Использование REST API для передачи данных отчета
Иногда нужно не просто отправить отчет по почте, а предоставить его через API для дальнейшей обработки. WordPress REST API отлично подходит для этой задачи.
Регистрация своего REST API endpoint
Добавим новый endpoint, который будет возвращать текущий отчет в JSON:
add_action('rest_api_init', function () {
register_rest_route('wpgen/v1', '/report', array(
'methods' => 'GET',
'callback' => 'wpgen_rest_report_callback',
'permission_callback' => function () {
return current_user_can('manage_options');
}
));
});
function wpgen_rest_report_callback() {
$post_count = wp_count_posts()->publish;
$date = date('Y-m-d H:i:s');
return array(
'date' => $date,
'published_posts' => $post_count
);
}Теперь при GET-запросе на /wp-json/wpgen/v1/report администратор получит JSON с актуальной статистикой.
Интеграция REST API с WP-Cron отчетом
Можно расширить функцию wpgen_generate_report_function, чтобы она не только отправляла email, но и сохраняла последний отчет в опции, для быстрой отдачи через API:
function wpgen_generate_report_function() {
$post_count = wp_count_posts()->publish;
$date = date('Y-m-d H:i:s');
$report = array(
'date' => $date,
'published_posts' => $post_count
);
update_option('wpgen_last_report', $report);
$message = "Отчет на $date:\nОпубликовано записей: $post_count";
wp_mail(get_option('admin_email'), 'Автоматический отчет WPGen', $message);
}
function wpgen_rest_report_callback() {
$report = get_option('wpgen_last_report');
if (!$report) {
return new WP_Error('no_report', 'Отчет еще не создан', array('status' => 404));
}
return $report;
}Полезные плагины для расширения функционала отчетов
Если вы хотите более продвинутые отчеты и удобный интерфейс, рекомендую обратить внимание на плагины из WPShop.ru:
- Expert Review — для создания и управления экспертными отзывами с возможностью автоматического сбора данных;
- ABC Pagination — для удобной пагинации данных в отчетах;
- My Popup — для показа важной информации пользователям с возможностью автоматизации;
- WPCommunity — для построения сообществ с аналитикой и отчетами.
Все эти инструменты можно интегрировать с вашей системой отчетности, дополняя базовый функционал.
Резюме и рекомендации по безопасности
При работе с WP-Cron и REST API важно помнить о безопасности. Например, ограничивайте доступ к API только авторизованным пользователям с нужными правами, как показано в примере с permission_callback. Также контролируйте частоту запуска задач, чтобы не создавать нагрузку на сервер.
Если сайт получает мало трафика, WP-Cron может запускаться с задержками. Для надежности можно настроить системный cron на вызов wp-cron.php по расписанию.
Используйте функции с префиксом wpgen_, чтобы избежать конфликтов с другими плагинами и темами.