Ведение учета активности пользователей на сайте WordPress — важная задача для администраторов и разработчиков, особенно если у вас сообщество, форум или любой сайт с регистрацией. В этой статье разберем, как реализовать вывод списка последних активных пользователей, используя кастомный код и плагины, а также оптимизировать работу для больших сайтов.
Почему важно отображать последних активных пользователей
Отслеживание активности пользователей помогает:
- Повысить вовлеченность, показывая кто недавно был на сайте.
- Контролировать активность и выявлять потенциальных спамеров.
- Создавать доверие в сообществе, демонстрируя живых участников.
- Использовать данные для внутренней аналитики и мотивации пользователей.
Типичная задача — вывести список пользователей, которые заходили на сайт в течение последних 24 часов, с указанием времени последнего посещения.
Как WordPress хранит данные о последнем входе пользователя
По умолчанию WordPress не сохраняет время последнего входа в стандартных таблицах. Для этого нужно самостоятельно реализовать хранение и обновление этой информации.
Обычно для сохранения используется user_meta с ключом, например, wpco_last_login. При каждом входе пользователя в систему мы обновляем этот мета-ключ текущим временем.
Добавление записи времени последнего входа
Для автоматического обновления времени последнего визита в файл functions.php вашей темы или в отдельный плагин добавьте следующий код:
add_action('wp_login', 'wpco_update_last_login', 10, 2);
function wpco_update_last_login($user_login, $user) {
update_user_meta($user->ID, 'wpco_last_login', current_time('mysql'));
}
Функция срабатывает при успешном входе и обновляет мета-ключ с текущим временем сервера в формате MySQL.
Вывод списка последних активных пользователей
Теперь, когда у нас есть данные о времени последнего входа, можно вывести список пользователей, которые были активны, например, за последние 24 часа.
Для выборки подойдет WP_User_Query с мета-запросом:
function wpco_get_recent_active_users($hours = 24) {
$since = date('Y-m-d H:i:s', strtotime('-' . intval($hours) . ' hours'));
$args = [
'meta_key' => 'wpco_last_login',
'meta_value' => $since,
'meta_compare' => '>=',
'orderby' => 'meta_value',
'order' => 'DESC',
'number' => 10,
'fields' => ['ID', 'display_name', 'user_email'],
];
$user_query = new WP_User_Query($args);
return $user_query->get_results();
}
Эта функция возвращает массив пользователей, которые заходили за последние $hours часов (по умолчанию 24), максимум 10 штук, отсортированных по времени входа.
Пример вывода на фронтенде
Для вывода списка последних активных пользователей в шаблон можно использовать следующий код:
$users = wpco_get_recent_active_users(24);
if (!empty($users)) {
echo '<ul class="wpco-active-users">';
foreach ($users as $user) {
$last_login = get_user_meta($user->ID, 'wpco_last_login', true);
echo '<li>' . esc_html($user->display_name) . ' — последний вход: ' . esc_html($last_login) . '</li>';
}
echo '</ul>';
} else {
echo '<p>Активных пользователей за последние 24 часа нет.</p>';
}
Использование плагинов для отслеживания активности
Если вы не хотите писать код, есть хорошие плагины, которые помогут:
- WP User Activity Log — ведет подробный лог активности пользователей, включая входы, просмотры страниц, изменения профиля.
- Simple History — простой журнал действий, можно настроить отображение последних активных.
- Clearfy Pro — оптимизирует работу сайта и может помочь сократить нагрузку, если у вас большой сайт с активными пользователями.
Эти плагины позволяют получить расширенную аналитику и имеют готовые виджеты и шорткоды для вывода.
Оптимизация и кеширование
Если у вас много пользователей, регулярные запросы по времени последнего входа могут нагружать базу данных. Рекомендуется:
- Кешировать результаты запроса с помощью Transients API.
- Обновлять кеш по расписанию через WP-Cron, например, раз в 15 минут.
- Использовать индексирование мета-ключей в базе данных для ускорения запросов.
Пример простого кеширования:
function wpco_get_recent_active_users_cached($hours = 24) {
$cache_key = 'wpco_recent_active_' . $hours;
$users = get_transient($cache_key);
if ($users === false) {
$users = wpco_get_recent_active_users($hours);
set_transient($cache_key, $users, 15 * MINUTE_IN_SECONDS);
}
return $users;
}
Заключение
Отображение последних активных пользователей — полезная функциональность для многих проектов на WordPress. Варианты решения могут быть как на чистом коде, так и с использованием плагинов. Главное — правильно хранить и обновлять время последнего входа, а также оптимизировать выборку для скорости и нагрузки.
Для более продвинутых вариантов можно интегрировать с WPStories для создания живых историй активности пользователей или использовать WPRemark для комментариев и обратной связи от активных участников.