Автоматизация создания и отправки отчётов — важная задача для многих сайтов на WordPress, особенно если требуется регулярное информирование администраторов, редакторов или клиентов о состоянии сайта, статистике или других данных. В этой статье мы подробно разберём, как настроить автоматическую генерацию отчётов с помощью WP-Cron и REST API, а также как отправлять их по электронной почте или сохранять для последующего использования.
Что такое WP-Cron и почему он подходит для автоматизации отчётов
WP-Cron — это встроенный в WordPress псевдопланировщик задач, который позволяет запускать функции в заданное время или с определённым интервалом. В отличие от системных cron-задач на сервере, WP-Cron срабатывает при посещении сайта, что подходит для большинства сред и не требует доступа к серверу.
С помощью WP-Cron можно настроить регулярное выполнение функции, которая будет собирать необходимые данные, формировать отчёт и отправлять его нужным получателям.
Однако важно понимать ограничения WP-Cron: он не гарантирует точное время запуска, особенно на сайтах с малым трафиком. Для критичных задач лучше настроить системный cron, который будет вызывать WP-Cron вручную.
Регистрация собственного события WP-Cron
Для начала нужно зарегистрировать событие, которое будет срабатывать регулярно. Добавим в файл functions.php или в основной файл плагина следующий код:
function wpcommunity_register_cron_event() {
if (!wp_next_scheduled('wpcommunity_generate_report')) {
wp_schedule_event(time(), 'daily', 'wpcommunity_generate_report');
}
}
add_action('wp', 'wpcommunity_register_cron_event');
Здесь мы регистрируем событие wpcommunity_generate_report, которое будет запускаться ежедневно.
Создание функции генерации отчёта
Теперь опишем функцию, которая будет запускаться по событию, собирать нужные данные и формировать отчёт. В нашем примере сделаем простой отчёт по количеству опубликованных постов и комментариев за сутки.
function wpcommunity_generate_report_function() {
$date_from = date('Y-m-d 00:00:00', strtotime('-1 day'));
$date_to = date('Y-m-d 23:59:59', strtotime('-1 day'));
$args_posts = [
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => [
[
'after' => $date_from,
'before' => $date_to,
'inclusive' => true,
],
],
'fields' => 'ids',
];
$query = new WP_Query($args_posts);
$posts_count = $query->found_posts;
$comments_count = get_comments([
'date_query' => [
[
'after' => $date_from,
'before' => $date_to,
'inclusive' => true,
],
],
'count' => true,
]);
$report = "Отчёт за " . date('d.m.Y', strtotime('-1 day')) . ":\n";
$report .= "Опубликовано постов: " . $posts_count . "\n";
$report .= "Добавлено комментариев: " . $comments_count . "\n";
// Отправка или сохранение отчёта здесь
wpcommunity_send_report_email($report);
}
add_action('wpcommunity_generate_report', 'wpcommunity_generate_report_function');
Функция собирает статистику за предыдущий день и формирует текст отчёта.
Отправка отчёта на email
Для отправки отчёта по электронной почте используем стандартную функцию wp_mail(). Создадим вспомогательную функцию:
function wpcommunity_send_report_email($report_text) {
$to = get_option('admin_email'); // Можно заменить на нужный email
$subject = 'Автоматический отчёт WordPress за вчера';
$headers = ['Content-Type: text/plain; charset=UTF-8'];
wp_mail($to, $subject, $report_text, $headers);
}
Таким образом, при срабатывании WP-Cron будет отправлено письмо с отчётом.
Использование REST API для получения отчётов по запросу
Кроме автоматической отправки, полезно иметь возможность получить отчёт по запросу через API. Создадим REST API endpoint, который будет возвращать аналогичный отчёт в формате JSON.
function wpcommunity_register_rest_route() {
register_rest_route('wpcommunity/v1', '/daily-report', [
'methods' => 'GET',
'callback' => 'wpcommunity_rest_report_callback',
'permission_callback' => function () {
return current_user_can('manage_options');
}
]);
}
add_action('rest_api_init', 'wpcommunity_register_rest_route');
function wpcommunity_rest_report_callback(WP_REST_Request $request) {
$date_from = date('Y-m-d 00:00:00', strtotime('-1 day'));
$date_to = date('Y-m-d 23:59:59', strtotime('-1 day'));
$args_posts = [
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => [
[
'after' => $date_from,
'before' => $date_to,
'inclusive' => true,
],
],
'fields' => 'ids',
];
$query = new WP_Query($args_posts);
$posts_count = $query->found_posts;
$comments_count = get_comments([
'date_query' => [
[
'after' => $date_from,
'before' => $date_to,
'inclusive' => true,
],
],
'count' => true,
]);
return [
'date' => date('Y-m-d', strtotime('-1 day')),
'posts_published' => $posts_count,
'comments_added' => $comments_count,
];
}
Теперь, отправив запрос GET на /wp-json/wpcommunity/v1/daily-report, можно получить свежие данные отчёта.
Дополнительные советы и плагины для расширения функционала отчётов
Если хотите получить более мощные и гибкие отчёты, можно использовать или интегрировать готовые плагины:
- WP Statistics — предоставляет подробную статистику по посещаемости;
- Clearfy — плагин оптимизации с некоторыми инструментами по аналитике и очистке;
- Для создания кастомных отчётов можно использовать Expert Review, который позволяет собирать и обрабатывать пользовательские данные.
В зависимости от специфики сайта, можно дорабатывать систему отчётов, добавляя данные из пользовательских типов записей, метаданных и внешних источников.
Настройка системного cron для повышения надёжности
Чтобы WP-Cron срабатывал точно по расписанию, на хостинге можно добавить системное задание, которое будет вызывать событие вручную. Пример команды для Linux:
wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Замените https://example.com на адрес вашего сайта. Это позволит запускать задачи в нужное время без зависимости от посещаемости.