如果其他用户在线,我想在我的网站上显示在线状态。因此,例如,如果用户A想知道用户B是否有空,我想显示一个在线标志。
我知道WordPress中有一个名为is_user_logged_in()
的功能,但该功能仅适用于当前用户。 https://developer.wordpress.org/reference/functions/is_user_logged_in/
那么,有谁知道我如何做到这一点?
这是逻辑:
if ( user_online( $user_id ) ) {
return 'Online';
} else {
return 'Absent';
}
答案 0 :(得分:2)
您可以使用Transients API来获取用户的状态。
创建一个钩在init
上的user-online-update函数。例如:
// get logged-in users
$logged_in_users = get_transient('online_status');
// get current user ID
$user = wp_get_current_user();
// check if the current user needs to update his online status;
// status no need to update if user exist in the list
// and if his "last activity" was less than let's say ...15 minutes ago
$no_need_to_update = isset($logged_in_users[$user->ID])
&& $logged_in_users[$user->ID] > (time() - (15 * 60));
// update the list if needed
if (!$no_need_to_update) {
$logged_in_users[$user->ID] = time();
set_transient('online_status', $logged_in_users, $expire_in = (30*60)); // 30 mins
}
这应该在每次页面加载时运行,但是瞬态仅在需要时才会更新。如果您有大量在线用户,则可能需要增加“上次活动”时间范围以减少数据库写入,但是对于大多数站点而言,15分钟绰绰有余。
现在要检查用户是否在线,只需在瞬态内部查看,看看某个用户是否在线,就像您在上面所做的一样:
// get logged in users
$logged_in_users = get_transient('online_status');
// for eg. on author page
$user_to_check = get_query_var('author');
$online = isset($logged_in_users[$user_to_check])
&& ($logged_in_users[$user_to_check] > (time() - (15 * 60)));
如果完全没有活动,瞬态将在30分钟后过期。但是如果万一用户一直在线,它不会过期,那么您可能希望通过将另一个函数挂在twice-daily event或类似的东西上来定期清理此瞬态。此功能将删除旧的$logged_in_users
条目...
答案 1 :(得分:0)
First get the user id of the user B by
$user_id_B = get_current_user_id();
Now here give the condition for the particular user B to check whether he is online or not
if(is_user_logged_in()){
if( $user_id_B == 'user id of B')
{
return 'Online'; (or echo 'online';)
}
}
By this you will get the presence of user B.