在WordPress上将用户状态设置为缺席

时间:2018-08-18 作者:Vitor Hugo

分析函数以了解如何解决问题,我不知道它是否有效,但如果函数给出两次检查会怎么样。

假设函数首先在前3分钟(180秒)内进行检查,并检测到用户处于脱机/非活动状态,直到那时,函数将解释用户刚刚离开。

当功能执行第二次检查并检测到用户处于非活动状态超过6分钟(360秒)时,用户将自动从缺席状态转到脱机状态。

我不擅长PHP,所以我不知道如何做到这一点:(

函数(functions.php):

// Updates User Activity Status
add_action(\'init\', \'riverlab_users_status_init\');
add_action(\'admin_init\', \'riverlab_users_status_init\');
function riverlab_users_status_init(){
$logged_in_users = get_transient(\'users_status\'); // Capture users\' activities by wordpress transients
$user = wp_get_current_user(); // Capture of current user data
// Update the user if it is not in the list, or if it is not online for the last 3 minutes (180 seconds)
if ( !isset($logged_in_users[$user->ID][\'last\']) || $logged_in_users[$user->ID][\'last\'] <= time()-180 ){
$logged_in_users[$user->ID] = array(
\'id\' => $user->ID,
\'username\' => $user->user_login,
\'last\' => time(),
);
set_transient(\'users_status\', $logged_in_users, 180); // Set to expiry every 3 minutes (180 seconds)
}
}
// Check if someone is online in the last 3 minutes
function riverlab_is_user_online($id){
$logged_in_users = get_transient(\'users_status\');

return isset($logged_in_users[$id][\'last\']) && $logged_in_users[$id][\'last\'] > time()-180;
}
// Check the last time someone was online
function riverlab_user_last_online($id){
$logged_in_users = get_transient(\'users_status\');
if ( isset($logged_in_users[$id][\'last\']) ){
return $logged_in_users[$id][\'last\'];
} else {
return false;
}
}
添加单个。php:

<?php $id = get_the_author_meta( \'ID\' );
// this should be inside a post (single.php for example)
if ( riverlab_is_user_online($id) ) {
        echo \'<span class="tag-status tag-status-online"></span>\';
    } else {
        echo \'<span class="tag-status tag-status-offline"></span>\';
    }
?>

1 个回复
SO网友:Rick Hellewell

您必须向页面添加一些Javascript来检查超时。

请记住,PHP是在服务器上执行的,服务器会将HTML发送到访问者的浏览器。生成页面后,服务器不会执行任何操作,直到该访问者(或其他任何人)发出下一个请求。

如果您希望在生成页面后发生一些事情,那么必须执行“客户端”操作。服务器生成(并发送)页面后,Javascript或其他代码将在客户端工作。

结束