Как создать собственный плагин для автоматического отчёта в WordPress

Автоматизация задач в WordPress — важная часть эффективного управления сайтом и анализа его работы. Часто возникает необходимость автоматически формировать отчёты по активности, контенту или статистике и отправлять их на e-mail или сохранять в админке для анализа. В этой статье мы разберём, как создать собственный плагин для автоматического отчёта в WordPress, который будет формировать данные и отправлять их по расписанию.

Почему стоит создать собственный плагин для отчётов

Существуют готовые решения, но иногда они избыточны или не покрывают специфические задачи. Создавая плагин самостоятельно, вы получаете полную гибкость в выборе данных, формате отчёта и способах доставки. Такой плагин легко адаптировать под требования сайта и автоматизировать повторяющиеся процессы.

Кроме того, собственный плагин позволяет интегрировать дополнительные функции, например, фильтрацию данных, кастомные шаблоны писем или подключение к внешним API.

Основные шаги создания плагина

Для создания плагина нам понадобится:

  • Создать структуру плагина и подключить его к WordPress.
  • Реализовать функцию генерации отчёта с нужными данными.
  • Добавить возможность отправки отчёта по e-mail.
  • Настроить планировщик заданий WP-Cron для автоматического запуска.
  • Добавить страницу настроек в админке для управления параметрами отчёта.

Создание структуры плагина

Создайте папку wpnews-auto-report в wp-content/plugins/ и файл wpnews-auto-report.php с базовым описанием:

<?php
/**
 * Plugin Name: WPNews Авто Отчёт
 * Description: Плагин для автоматического формирования и отправки отчётов.
 * Version: 1.0
 * Author: WPNews
 */

// Защита от прямого вызова
if (!defined('ABSPATH')) {
    exit;
}

Функция генерации отчёта

В этом примере сформируем простой отчёт по публикациям за последний день:

function wpnews_generate_daily_report() {
    $args = [
        'date_query' => [
            [
                'after' => '1 day ago',
                'inclusive' => true,
            ],
        ],
        'post_type' => 'post',
        'posts_per_page' => -1,
    ];
    $query = new WP_Query($args);

    $report = "Отчёт по публикациям за последние 24 часа:\n";
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $report .= '- ' . get_the_title() . ' (' . get_the_date() . ')\n';
        }
        wp_reset_postdata();
    } else {
        $report .= "Публикаций не найдено.\n";
    }
    return $report;
}

Отправка отчёта по e-mail

Используем стандартную функцию wp_mail для отправки сформированного отчёта:

function wpnews_send_daily_report() {
    $to = get_option('wpnews_report_email', get_bloginfo('admin_email'));
    $subject = 'Ежедневный отчёт сайта ' . get_bloginfo('name');
    $message = wpnews_generate_daily_report();

    wp_mail($to, $subject, $message);
}

Добавление задания в WP-Cron

Чтобы отчёт отправлялся автоматически, настроим ежедневный крон:

register_activation_hook(__FILE__, 'wpnews_activation_schedule');
register_deactivation_hook(__FILE__, 'wpnews_deactivation_schedule');

function wpnews_activation_schedule() {
    if (!wp_next_scheduled('wpnews_daily_report_event')) {
        wp_schedule_event(time(), 'daily', 'wpnews_daily_report_event');
    }
}

function wpnews_deactivation_schedule() {
    wp_clear_scheduled_hook('wpnews_daily_report_event');
}

add_action('wpnews_daily_report_event', 'wpnews_send_daily_report');

Добавление страницы настроек в админке

Чтобы пользователь мог задать e-mail для отправки отчётов, создадим простую страницу настроек:

add_action('admin_menu', 'wpnews_report_add_admin_menu');
add_action('admin_init', 'wpnews_report_settings_init');

function wpnews_report_add_admin_menu() {
    add_options_page('WPNews Отчёты', 'WPNews Отчёты', 'manage_options', 'wpnews_report', 'wpnews_report_options_page');
}

function wpnews_report_settings_init() {
    register_setting('wpnews_report_group', 'wpnews_report_email');

    add_settings_section(
        'wpnews_report_section',
        'Настройки отчётов',
        null,
        'wpnews_report'
    );

    add_settings_field(
        'wpnews_report_email',
        'E-mail для отправки отчётов',
        'wpnews_report_email_render',
        'wpnews_report',
        'wpnews_report_section'
    );
}

function wpnews_report_email_render() {
    $email = get_option('wpnews_report_email', get_bloginfo('admin_email'));
    echo '<input type="email" name="wpnews_report_email" value="' . esc_attr($email) . '" size="40" />';
}

function wpnews_report_options_page() {
    ?>
    <form action="options.php" method="post">
        <h2>Настройки автоматических отчётов WPNews</h2>
        <?php
        settings_fields('wpnews_report_group');
        do_settings_sections('wpnews_report');
        submit_button();
        ?>
    </form>
    <?php
}

Дополнительные советы и рекомендации

Для расширения функциональности плагина можно добавить:

  • Генерацию отчётов в формате HTML или PDF (с использованием библиотек вроде TCPDF или DOMPDF).
  • Отчёты по другим данным: комментарии, пользователи, заказы WooCommerce.
  • Интеграцию с плагином WPRemark для создания визуальных отчётов и диаграмм.
  • Настройку частоты отправки отчётов через админку.

Если вы используете плагин WP-Cron от WPShop, можно интегрировать его для более надёжного выполнения заданий, учитывая особенности хостинга.

Заключение

Создание собственного плагина для автоматических отчётов в WordPress — отличное решение для тех, кто хочет получить именно ту информацию и в том формате, который нужен. Пример выше — базовый, но на его основе можно строить сложные и полезные инструменты, которые помогут улучшить управление сайтом и анализировать данные без лишнего труда.

Как создать поддержку многоязычности в WordPress без плагинов
18.11.2025
Как использовать WordPress Hooks для защиты от спама
26.02.2026
Как удалить старые медиа файлы в WordPress
11.02.2026
Как использовать WordPress Transients для эффективного кэширования данных
07.02.2026
Как отключить XML-RPC в WordPress для повышения безопасности
02.01.2026