如何在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 删除。
还没有任何评论,赶紧来占个楼吧!