要在 WordPress 后台实时显示当前在线的用户名(即当前登录并活跃在后台的用户),可以通过以下方式实现:
注意:WordPress 本身没有“在线用户”的内置机制,因此我们需要自己记录用户的“最后活动时间”,并定义一个“在线”阈值(例如5分钟内有活动就算在线)。
方法一:WordPress 后台实时显示当前在线的用户名
实现思路
- 记录每个用户在后台的最后活动时间(通过
admin_init钩子)。 - 存储这些信息到数据库(使用
wp_options表)。 - 在后台某处(如顶部管理栏或仪表盘小工具)显示当前在线的用户名列表。
- 定期清理过期数据(可选)。
完整代码(放入主题的 functions.php 或自定义插件中)
// 1. 记录当前管理员用户的最后活动时间(仅限后台)
function track_admin_last_activity() {
if (is_admin() && is_user_logged_in()) {
$user_id = get_current_user_id();
$current_time = time();
// 获取现有活动记录
$active_users = get_option('wp_admin_active_users', array());
// 更新该用户的最后活动时间
$active_users[$user_id] = $current_time;
// 清理超过 10 分钟未活动的用户(可选)
$cutoff = $current_time - (10 * 60); // 10分钟
$active_users = array_filter($active_users, function($time) use ($cutoff) {
return $time >= $cutoff;
});
update_option('wp_admin_active_users', $active_users, false);
}
}
add_action('admin_init', 'track_admin_last_activity');
// 2. 获取当前在线的管理员用户(5分钟内有活动)
function get_online_admin_users($minutes = 5) {
$active_users = get_option('wp_admin_active_users', array());
$cutoff = time() - ($minutes * 60);
$online_users = array();
foreach ($active_users as $user_id => $last_active) {
if ($last_active >= $cutoff) {
$user = get_userdata($user_id);
if ($user && user_can($user, 'edit_posts')) { // 可根据需要调整权限
$online_users[] = $user->display_name;
}
}
}
return $online_users;
}
// 3. 在 WordPress 管理栏添加在线用户显示
function add_online_users_to_admin_bar($admin_bar) {
if (!is_admin() || !is_user_logged_in()) {
return;
}
$online_users = get_online_admin_users(5); // 5分钟内活跃视为在线
if (!empty($online_users)) {
$list = implode(', ', array_unique($online_users));
$title = '在线用户: ' . $list;
} else {
$title = '暂无其他用户在线';
}
$admin_bar->add_node(array(
'id' => 'online-admin-users',
'title' => '<span style="color:#4CAF50;">👥 ' . esc_html($title) . '</span>',
'href' => admin_url(),
'meta' => array('title' => '当前在线的后台用户')
));
}
add_action('admin_bar_menu', 'add_online_users_to_admin_bar', 999);
🔍 效果说明
- 登录 WordPress 后台后,会在顶部管理栏(Admin Bar)右侧显示当前 5 分钟内活跃的管理员用户名。
- 每次你在后台操作(点击菜单、刷新页面等),都会更新你的“最后活动时间”。
- 其他用户也能看到彼此是否在线(仅限有后台访问权限的用户)。
🛡️ 安全与优化建议
- 如果站点用户量大,可考虑用
Transient API或 Redis 缓存代替wp_options。 - 可限制只对特定角色(如
administrator)显示或记录。 - 如需更精确的“实时”效果(如 WebSocket),需引入前端 JS + Ajax 轮询,但对大多数场景上述方案已足够。
方法二:修改成只在仪表盘(Dashboard)显示
好的!下面的代码会将「当前在线的后台用户」信息仅显示在 WordPress 仪表盘(Dashboard)首页,而不是顶部管理栏。
✅ 修改后功能说明
- 仅当用户访问 WordPress 后台首页(即
/wp-admin/index.php) 时,才显示一个 Dashboard 小工具(Widget)。 - 显示最近 5 分钟内 在后台有活动的用户(排除自己)。
- 使用 WordPress 原生的 Dashboard Widget API,样式统一、安全可靠。
📌 完整代码(放入主题 functions.php 或自定义插件)
// 1. 记录管理员用户的最后活动时间(仅限后台)
function track_admin_last_activity() {
if (is_admin() && is_user_logged_in()) {
$user_id = get_current_user_id();
$current_time = time();
$active_users = get_option('wp_admin_active_users', array());
$active_users[$user_id] = $current_time;
// 清理超过 10 分钟未活动的记录(防止数据膨胀)
$cutoff = $current_time - (10 * 60);
$active_users = array_filter($active_users, function($time) use ($cutoff) {
return $time >= $cutoff;
});
update_option('wp_admin_active_users', $active_users, false);
}
}
add_action('admin_init', 'track_admin_last_activity');
// 2. 获取当前在线的后台用户(排除当前用户)
function get_online_admin_users_excluding_current($minutes = 5) {
$current_user_id = get_current_user_id();
$active_users = get_option('wp_admin_active_users', array());
$cutoff = time() - ($minutes * 60);
$online_users = array();
foreach ($active_users as $user_id => $last_active) {
if ($user_id == $current_user_id) continue; // 排除自己
if ($last_active >= $cutoff) {
$user = get_userdata($user_id);
if ($user && user_can($user, 'read')) { // 至少能进后台的用户
$online_users[] = esc_html($user->display_name);
}
}
}
return array_unique($online_users);
}
// 3. 添加仪表盘小工具:显示在线用户
function add_online_users_dashboard_widget() {
// 仅在仪表盘页面注册 widget
wp_add_dashboard_widget(
'dashboard_online_users', // Widget ID
'👥 后台在线用户', // 标题
'render_online_users_dashboard_widget' // 回调函数
);
}
add_action('wp_dashboard_setup', 'add_online_users_dashboard_widget');
// 4. 渲染小工具内容
function render_online_users_dashboard_widget() {
$online_users = get_online_admin_users_excluding_current(5);
if (!empty($online_users)) {
echo '<p>以下用户最近 5 分钟内在后台活跃:</p>';
echo '<ul style="padding-left: 20px; margin: 0;">';
foreach ($online_users as $name) {
echo '<li>' . $name . '</li>';
}
echo '</ul>';
} else {
echo '<p>目前没有其他用户在后台活跃。</p>';
}
// 可选:显示刷新提示(因非实时,需手动刷新页面)
echo '<p><small>注:状态基于页面加载时的数据,刷新页面可更新。</small></p>';
}
🖼️ 效果预览
进入 WordPress 后台首页(仪表盘)后,你会看到一个新的小工具:

✅ 优势
- 干净集成:使用官方 Dashboard Widget,不破坏 UI。
- 隐私友好:不显示当前用户自己。
- 轻量高效:无 Ajax、无前端 JS,适合大多数站点。
- 自动清理:旧数据不会无限累积。