列表当前登录的用户(wordpress)

时间:2014-02-21 07:47:32

标签: wordpress

有没有办法显示当前登录用户的列表?

理想情况下,它只会显示他们的名字和重力。

5 个答案:

答案 0 :(得分:5)

Personaly我会使用session_tokens元键来确定用户是否在线(或者正在运行会话)。

$aUsers = get_users([
    'meta_key' => 'session_tokens',
    'meta_compare' => 'EXISTS'
]);

您将获得具有正在运行的会话的用户列表。然后你可以用它来输出。

echo sprintf(
    'Users online: %s',
    implode(', ', array_map(function($oUser){
        return get_avatar( $oUser->ID, 96 ) . '<span class="username">'$oUser->display_name.'</span>';
    }, $aUsers))
);

如果修改最后一位代码,甚至可以显示会话IP地址。

echo sprintf(
    'Users online: %s',
    implode(', ', array_map(function($oUser){
        $aCurrentSessions = get_user_meta($oUser->ID, 'session_tokens', true);
        return get_avatar( $oUser->ID, 96 ) . '<span class="username">'$oUser->display_name.'</span> (' .
            implode('; ', array_map(function($aSession) {
                return $aSession['ip']; // only return the session ips
            }, $aCurrentSessions)) . ')';
    }, $aUsers))
);

答案 1 :(得分:3)

Wordpress没有内置功能,但你可以自己轻松添加一个。例如,您可以使用wp_login挂钩存储每个用户的上次登录时间。然后,您可以列出在过去30分钟内在线登录的用户。

add_action('wp_login', 'store_last_login', 10, 2);

function store_last_login($current_user) {
    global $current_user;
    get_currentuserinfo();
    $user = $current_user->user_login;
    update_user_meta($current_user->ID, 'last_login', current_time('mysql', 1));
}

然后,您可以通过以下方式回显在过去二十分钟内(或您选择的任何时间范围内)登录的用户:

function list_online_users() {
$users = get_users( 'blog_id=1' );
foreach ($users as $online) {

    $getLastLogin = (get_user_meta($online->ID, 'last_login', true));
    $lastLogin = new DateTime($getLastLogin);
    $since_start = $lastLogin->diff(new DateTime(current_time('mysql', 1)));

    $minutesSinceLogin = $since_start->i;

    // this will list every user and whether they logged in within the last 30 minutes
    if ($minutesSinceLogin > 30 ) {
        echo '<li>'.$online->user_login . ' is offline </li>';
    } else { 
        echo '<li>'.$online->user_login . ' is online </li>'; 
    }

    }

}

答案 2 :(得分:0)

如果您不想使用插件,可以轻松完成:

1 /将此添加到您的functions.php文件中,以在用户连接或断开连接时添加或删除usermeta:

465656

2 /在您的模板中(您也可以在functions.php中创建一个函数),以显示所有已登录的用户,只需将内置的wordpress get_users()与一些元查询参数一起使用即可:

@Documented
@MapKey
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ViewModelKey {

    Class<? extends ViewModel> value();
}

答案 3 :(得分:-1)

1)在wp_users表中创建名为'status'的额外字段,其中包含enum('1','0') 2)在functions.php之后输入以下代码

<?php
function add_session_mitesh()
{
    global $wpdb;
    if(is_user_logged_in())
    {
        $user_id = get_current_user_id();
        $wpdb->query("UPDATE wp_users SET `status` = '1' WHERE `wp_users`.`ID` = $user_id;");
    }
     $user_id;
}
add_action('init','add_session_mitesh');


function delete_session_mitesh() {
global $wpdb;
    if(is_user_logged_in())
    {
        $user_id = get_current_user_id();
        $wpdb->query("UPDATE wp_users SET `status` = '0' WHERE `wp_users`.`ID` = $user_id;");
    }
 $user_id;
}
add_action('wp_logout', 'delete_session_mitesh');
?>

现在列出您可以使用的当前登录用户

<?php  $users=$wpdb->get_results( 'SELECT * FROM wp_users where status='1'', 'ARRAY_A'); 
<table width="100%" border="2px" style="text-align: center;">
    <?php
    foreach( $users as $g )
    {   
    ?>
        <tr><td style="text-align: center;"> <center> <?php echo $g['user_login'] ?> </center></td>
        </tr>
    <?php } ?>
    </p>
    </table>    

答案 4 :(得分:-4)

您可以通过以下方式获取当前登录用户

$current_user = wp_get_current_user();
echo 'Username: ' . $current_user->user_login . '<br />';
echo 'User email: ' . $current_user->user_email . '<br />';
echo 'User first name: ' . $current_user->user_firstname . '<br />';
echo 'User last name: ' . $current_user->user_lastname . '<br />';
echo 'User display name: ' . $current_user->display_name . '<br />';
echo 'User ID: ' . $current_user->ID . '<br />'; ?>

id这个$ current_user变量你可以找到你可以从这个变量获取的数组和对象中的所有用户细节