Как создать автоматический отчет по активности пользователей в WordPress

Отслеживание активности пользователей на сайте WordPress — важная задача для администраторов и разработчиков, особенно если вы управляете многопользовательским ресурсом или продаете услуги. В этой статье разберем, как создать автоматический отчет по активности пользователей с помощью кода и рекомендуемых плагинов, а также как отправлять этот отчет на почту или сохранять в базе для дальнейшего анализа.

Зачем нужен отчет по активности пользователей в WordPress

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

  • Отслеживать вовлеченность и активность аудитории;
  • Обнаруживать подозрительную активность и возможные взломы;
  • Оптимизировать контент и функционал под поведение пользователей;
  • Автоматизировать администрирование и принимать решения на основе данных.

Реализовать такой отчет можно разными способами — от использования готовых плагинов до кастомной разработки с использованием хуков WordPress.

Использование плагинов для сбора данных об активности

Если вам нужна быстрая и готовая к работе система, рассмотрите следующие проверенные плагины:

  • WP User Activity — фиксирует действия пользователей, позволяет просматривать логи и экспортировать их;
  • Expert Review — плагин с отчетами и аналитикой, подходит для оценки эффективности пользователей;
  • WPRemark — инструмент для сбора отзывов и действий с возможностью создания отчетов.

Однако если нужна кастомизация или минимизация нагрузки, лучше использовать собственные решения на базе хуков WordPress.

Создаем базовую систему сбора активности с помощью кода

Для начала создадим таблицу в базе данных для хранения активности. Используем функцию активации плагина или темы:

function wpbox_create_activity_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpbox_user_activity';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE IF NOT EXISTS $table_name (
      id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      user_id bigint(20) unsigned NOT NULL,
      activity_type varchar(100) NOT NULL,
      activity_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
      activity_data text DEFAULT NULL,
      PRIMARY KEY  (id),
      KEY user_id (user_id)
    ) $charset_collate;";

    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
}
register_activation_hook( __FILE__, 'wpbox_create_activity_table' );

Эта таблица будет хранить ID пользователя, тип активности, время и дополнительные данные.

Логируем входы пользователей

Используем хук wp_login, чтобы записывать логин в нашу таблицу:

function wpbox_log_user_login($user_login, $user) {
    global $wpdb;
    $table = $wpdb->prefix . 'wpbox_user_activity';

    $wpdb->insert(
        $table,
        [
            'user_id' => $user->ID,
            'activity_type' => 'login',
            'activity_time' => current_time('mysql'),
            'activity_data' => 'Пользователь вошел в систему'
        ]
    );
}
add_action('wp_login', 'wpbox_log_user_login', 10, 2);

Отслеживаем создание и обновление постов

Для отслеживания публикаций используем хук save_post:

function wpbox_log_post_save($post_ID, $post, $update) {
    if (wp_is_post_revision($post_ID)) return;

    global $wpdb;
    $table = $wpdb->prefix . 'wpbox_user_activity';
    $user_id = get_current_user_id();
    $type = $update ? 'update_post' : 'create_post';

    $wpdb->insert(
        $table,
        [
            'user_id' => $user_id,
            'activity_type' => $type,
            'activity_time' => current_time('mysql'),
            'activity_data' => 'Пост ID: ' . $post_ID . ', заголовок: ' . $post->post_title
        ]
    );
}
add_action('save_post', 'wpbox_log_post_save', 10, 3);

Генерация и отправка отчета по активности

Теперь создадим функцию для сбора данных за нужный период и формирования отчета в виде HTML-таблицы:

function wpbox_generate_activity_report($days = 7) {
    global $wpdb;
    $table = $wpdb->prefix . 'wpbox_user_activity';

    $date_from = date('Y-m-d H:i:s', strtotime('-' . intval($days) . ' days'));

    $results = $wpdb->get_results($wpdb->prepare(
        "SELECT user_id, activity_type, activity_time, activity_data FROM $table WHERE activity_time >= %s ORDER BY activity_time DESC",
        $date_from
    ));

    if (!$results) {
        return '<p>За последние ' . $days . ' дней активность не зафиксирована.</p>';
    }

    $html = '<table border="1" cellpadding="5" cellspacing="0"><thead><tr><th>Пользователь</th><th>Тип активности</th><th>Время</th><th>Данные</th></tr></thead><tbody>';

    foreach ($results as $row) {
        $user_info = get_userdata($row->user_id);
        $user_name = $user_info ? $user_info->user_login : 'Неизвестный пользователь';

        $html .= '<tr>';
        $html .= '<td>' . esc_html($user_name) . '</td>';
        $html .= '<td>' . esc_html($row->activity_type) . '</td>';
        $html .= '<td>' . esc_html($row->activity_time) . '</td>';
        $html .= '<td>' . esc_html($row->activity_data) . '</td>';
        $html .= '</tr>';
    }

    $html .= '</tbody></table>';

    return $html;
}

Для автоматической отправки отчета на email администратора можно использовать WP Cron:

function wpbox_send_weekly_report() {
    $report = wpbox_generate_activity_report(7);
    $admin_email = get_option('admin_email');
    $subject = 'Отчет по активности пользователей за неделю';

    wp_mail($admin_email, $subject, $report, ['Content-Type: text/html; charset=UTF-8']);
}

if (!wp_next_scheduled('wpbox_weekly_activity_report')) {
    wp_schedule_event(time(), 'weekly', 'wpbox_weekly_activity_report');
}
add_action('wpbox_weekly_activity_report', 'wpbox_send_weekly_report');

Расширение функционала: отслеживание действий в административной панели

Чтобы более детально фиксировать действия пользователей, можно использовать хук current_screen и связывать его с действиями, например, изменениями настроек или запуском определенных функций. Также полезно логировать ошибки и попытки доступа к закрытым разделам.

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

Использование сторонних сервисов и интеграция с WPShop

Если хочется расширить возможности, можно интегрировать ваш отчет с плагинами WPShop, например, Expert Review. Он позволит не только собирать данные, но и визуализировать их, а также делать подробный анализ.

Также для создания интерактивных отчетов и опросов можно использовать Quizle, чтобы получать обратную связь от пользователей и дополнять статистику.

Заключение по теме отчета активности

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

Автоматическое удаление старого кеша в WordPress: практическое руководство
18.12.2025
Как удалить заблокированных и неактивных пользователей WordPress без плагинов
27.04.2026
Как настроить производительность WordPress на уровне кода
03.12.2025
Автоматическое удаление старого метаданных в WordPress
10.04.2026
Как отключить автоматическое масштабирование изображений в WooCommerce
20.04.2026