如何在WordPress中添加用户在线功能?

在WordPress中使用Transients API (瞬态API)来存储、获取用户的状态,添加用户在线功能。

在WordPress中有一个名为is_user_logged_in()的函数,但是这个函数只对当前用户有效。

https://developer.wordpress.org/reference/functions/is_user_logged_in/

如果其他用户在线,显示在线状态。

那该怎么做呢?

wordpress 提供了非常多,非常强大的功能,灵活使用就可以做出来了。

这边推荐是可以使用Transients API (瞬态API)来存储、获取用户的状态。

https://developer.wordpress.org/apis/transients/

创建一个挂接在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)));// 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)));

// other user online
function user_online( $user_id ){
    $logged_in_users = get_transient('online_status');
    return isset($logged_in_users[$user_id])&& ($logged_in_users[$user_id] >  (time() - (15 * 60)));
}

如果根本没有任何活动,则该瞬态将在30分钟内过期。但是如果用户一直在线,它不会过期,所以可以通过wordpress的任务定时器,挂接另一个函数来定期清理这个瞬态。此函数将删除旧的$logged_in_users条目…

wordpress的任务定时器没有提供30分钟的,那可以自己注册一个:

function add_twicehourly_cron_schedules( $schedules ) {
	$schedules['twicehourly'] = array(
		'interval' => HOUR_IN_SECONDS / 2,
		'display'  => __( 'Twice Hourly', 'textdomain' ),
	);
	return $schedules;
}
add_filter( 'cron_schedules', 'add_twicehourly_cron_schedules' );

不在线用户的清理,就不写了,自己弄吧。 

……

之后,你就能以用户ID($user_id)的方式判断用户在线情况了。

	
if ( user_online( $user_id ) ) {
    return 'Online';
} else {
    return 'Absent';
}

类别:站长笔记

本文收集自互联网,转载请注明来源。
如有侵权,请联系 wper_net@163.com 删除。

评论 (0)COMMENT

登录 账号发表你的看法,还没有账号?立即免费 注册