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

Автоматизация создания отчетов — важная задача для сайтов на 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_, чтобы избежать конфликтов с другими плагинами и темами.

Как настроить отправку писем через SMTP в WordPress без плагинов
08.04.2026
Как решить проблему: не работает очистка кеша в WooCommerce
21.05.2026
Как создать автоматический отчет в WordPress с помощью WP-Cron и REST API
28.03.2026
Создание эффективного загрузчика изображений в WordPress с поддержкой Ajax
04.01.2026
Как создать собственный шорткод в WordPress: пошаговое руководство
06.11.2025