Как создать автоматические отчёты в WordPress с помощью WP-Cron и REST API

Автоматизация создания и отправки отчётов — важная задача для многих сайтов на 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 на адрес вашего сайта. Это позволит запускать задачи в нужное время без зависимости от посещаемости.

Как сделать автоматическое удаление старых мета данных в WordPress
11.03.2026
Как использовать фильтры для изменения цены в WooCommerce по условию
29.04.2026
Как использовать фильтры WooCommerce для автоматического изменения стоимости товаров
03.06.2026
Автоматическое изменение цены товара WooCommerce по атрибуту
17.04.2026
Как избежать проблем с разным форматом даты в WooCommerce
13.06.2026

Задать вопрос о вордпресс, получить ответ - это все можно сделать в нашем сообществе WP. Сайт в данный момент в разработке, изучите ссылки ниже: