Отслеживание активности пользователей на сайте WordPress важно для анализа поведения посетителей, повышения безопасности и улучшения пользовательского опыта. В этой статье мы разберем, как создать автоматический отчет по активности пользователей, используя кастомный PHP-код и популярные плагины. Вы получите работающий пример, который сможете адаптировать под свои задачи.
Для чего нужен отчет активности пользователей в WordPress
Отчеты активности позволяют видеть, кто и когда посещал сайт, какие страницы просматривал, какие действия выполнял (например, оставлял комментарии, делал заказы в WooCommerce, заполнял формы). Это помогает:
- Анализировать вовлеченность аудитории;
- Выявлять подозрительную активность и предотвращать мошенничество;
- Оптимизировать контент и улучшать юзабилити;
- Автоматически уведомлять администраторов или маркетологов о ключевых событиях.
Использование плагинов для сбора данных активности
Для сбора данных о поведении пользователей можно использовать готовые решения. Вот несколько полезных плагинов:
- WP Activity Log — мощный плагин для мониторинга активности пользователей и администраторов. Позволяет создавать отчеты, отправлять уведомления и фильтровать логи.
- Simple History — легкий плагин с понятным интерфейсом, отображающий последние действия пользователей и админов.
- Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wptool.ru&utm_medium=article&utm_campaign=kak-ustroyt-avtomaticheskiy-otchet-po-aktivnosti-polzovateley) — оптимизатор, который также включает возможности по безопасности и логированию активности.
Однако в некоторых случаях готовые плагины избыточны или не дают нужной кастомизации. Тогда на помощь приходит код.
Как написать свой простой лог активности пользователей в WordPress
Ниже пример, как отслеживать входы пользователей и сохранять эти данные в отдельной таблице базы данных. Для начала создадим функцию для создания таблицы при активации плагина или темы:
function wptool_create_activity_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'wptool_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 VARCHAR(255) NOT NULL,
activity_time DATETIME NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
register_activation_hook(__FILE__, 'wptool_create_activity_table');Теперь добавим запись в эту таблицу при каждом входе пользователя:
function wptool_log_user_login($user_login, $user) {
global $wpdb;
$table_name = $wpdb->prefix . 'wptool_user_activity';
$wpdb->insert(
$table_name,
[
'user_id' => $user->ID,
'activity' => 'login',
'activity_time' => current_time('mysql')
]
);
}
add_action('wp_login', 'wptool_log_user_login', 10, 2);Таким образом вы собираете базовые данные о входах. Аналогично можно логировать другие события: регистрации, комментарии, заказы и т.д.
Автоматическая отправка отчета по электронной почте
Чтобы получать отчет без ручного запроса, сделаем функцию, которая собирает данные за сутки и отправляет письмо администратору:
function wptool_send_daily_user_activity_report() {
global $wpdb;
$table_name = $wpdb->prefix . 'wptool_user_activity';
$date_from = date('Y-m-d 00:00:00', strtotime('-1 day'));
$date_to = date('Y-m-d 23:59:59', strtotime('-1 day'));
$results = $wpdb->get_results($wpdb->prepare(
"SELECT user_id, activity, activity_time FROM $table_name WHERE activity_time BETWEEN %s AND %s",
$date_from, $date_to
));
if (empty($results)) {
return; // Нет данных для отчета
}
$message = "Отчет активности пользователей за " . date('d.m.Y', strtotime('-1 day')) . ":\n";
foreach ($results as $row) {
$user_info = get_userdata($row->user_id);
$user_name = $user_info ? $user_info->user_login : 'Unknown';
$message .= "$user_name - $row->activity - $row->activity_time\n";
}
wp_mail(get_option('admin_email'), 'Ежедневный отчет активности пользователей', $message);
}
if (!wp_next_scheduled('wptool_daily_user_activity_report_event')) {
wp_schedule_event(strtotime('00:10:00'), 'daily', 'wptool_daily_user_activity_report_event');
}
add_action('wptool_daily_user_activity_report_event', 'wptool_send_daily_user_activity_report');Этот код настроит ежедневную отправку отчета в 00:10 по серверному времени.
Как визуализировать отчет активности на странице администратора
Для удобства можно вывести отчет прямо в админке. Добавим новый пункт меню и страницу с таблицей активности:
function wptool_add_admin_menu() {
add_menu_page(
'Активность пользователей',
'Активность пользователей',
'manage_options',
'wptool-user-activity',
'wptool_render_admin_page',
'dashicons-analytics',
80
);
}
add_action('admin_menu', 'wptool_add_admin_menu');
function wptool_render_admin_page() {
global $wpdb;
$table_name = $wpdb->prefix . 'wptool_user_activity';
$results = $wpdb->get_results("SELECT * FROM $table_name ORDER BY activity_time DESC LIMIT 50");
echo '<div class="wrap"><h1>Отчет активности пользователей</h1>';
echo '<table class="widefat fixed"><thead><tr><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 : 'Unknown';
echo "<tr><td>" . esc_html($user_name) . "</td><td>" . esc_html($row->activity) . "</td><td>" . esc_html($row->activity_time) . "</td></tr>";
}
echo '</tbody></table></div>';
}Теперь администратор может в любой момент видеть последние действия пользователей без сторонних сервисов.
Интеграция с WPRemark для расширенной аналитики
Если вам нужна более продвинутая аналитика и автоматизация отчетов, обратите внимание на плагин WPRemark. Он позволяет создавать гибкие отчеты, фильтровать данные и строить графики по активности пользователей, заказам и другим событиям.
Вы можете использовать собственный лог активности в связке с WPRemark, экспортируя данные через REST API и визуализируя их в удобных дашбордах.
Рекомендации по безопасности и производительности
Сбор и хранение активности пользователей требует аккуратности:
- Не храните чувствительные данные в логах.
- Регулярно очищайте старые записи, чтобы база не разрасталась.
- Используйте индексы в таблицах для ускорения выборок.
- Ограничьте права доступа к отчетам и логам, чтобы избежать утечки данных.
Если трафик большой, рассмотрите использование специализированных сервисов и плагинов, минимизирующих нагрузку на сервер.