Usuario_FTW
¿Hay alguna manera de mostrar una lista de los usuarios actualmente conectados?
Idealmente, solo mostraría su nombre y gravatar.
Jozze
Personalmente, usaría la meta clave session_tokens para determinar si un usuario está en línea (o tiene una sesión en ejecución) o no.
$aUsers = get_users([
'meta_key' => 'session_tokens',
'meta_compare' => 'EXISTS'
]);
Obtendrá una lista de usuarios con sesiones en ejecución. Entonces puedes usar eso para tu salida.
echo sprintf(
'Users online: %s',
implode(', ', array_map(function($oUser){
return get_avatar( $oUser->ID, 96 ) . '<span class="username">'$oUser->display_name.'</span>';
}, $aUsers))
);
Incluso podría mostrar las direcciones IP de la sesión si modifica el último bit de código.
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))
);
-
La primera línea devuelve incluso a los usuarios desconectados, así que supongo que lo que sugieres no es suficiente
– La vida después del invitado
2 de septiembre de 2020 a las 7:27
-
@Jozze, gracias por tu respuesta. ¿Le importaría señalar (a un programador veterano pero principiante de WP) cómo aplicar esta solución (por ejemplo, en un complemento)? Si es posible, un archivo de muestra (PHP) sería de mucha ayuda (git/mail/other).
– Dicha
3 de mayo de 2021 a las 9:33
WordPress no tiene una función integrada para esto, pero usted mismo puede agregar una fácilmente. Por ejemplo, puede usar el enlace wp_login para almacenar la última hora de inicio de sesión de cada usuario. Luego puede enumerar los usuarios que iniciaron sesión en los últimos 30 minutos más o menos como en línea.
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));
}
Luego, puede hacer eco de los usuarios que iniciaron sesión en los últimos veinte minutos (o el período de tiempo que elija) con algo como:
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>';
}
}
}
rafa226
Si no desea utilizar un complemento, puede hacerlo fácilmente:
1/ Agregue esto a su archivo functions.php para agregar o eliminar un usermeta cuando el usuario se conecta o desconecta:
function add_user_logged_meta(){
$user = wp_get_current_user();
update_user_meta($user->ID, 'asdb-loggedin', true);
}
// user connects
add_action('init','add_user_logged_meta');
function delete_user_logged_meta() {
$user = wp_get_current_user();
update_user_meta($user->ID, 'asdb-loggedin', false);
}
// user disconnects
add_action('clear_auth_cookie', 'delete_user_logged_meta');
2/ En sus plantillas (también puede crear una función en functions.php), para mostrar a todos los usuarios que han iniciado sesión, simplemente use el get_users() incorporado de wordpress con algunos parámetros de metaconsulta:
$loggedin_users = get_users([
'meta_key' => 'asdb-loggedin',
'meta_value' => '1',
'meta_compare' => '='
]);
foreach( $loggedin_users as $loggedin_user ){
echo $loggedin_user->user_login;
}
-
wp_logout
devuelve nulo. Es mejor reemplazarlo con ‘clear_auth_cookie’. Eso hace que este código funcione como se esperaba.– DavidA26
16 de marzo de 2020 a las 16:12
-
Gracias por la retroalimentación ! yo hice la modificacion
– rafa226
23 de marzo de 2020 a las 10:03
1) Cree en un campo adicional llamado ‘estado’ con enumeración (‘1’, ‘0’) en la tabla wp_users 2) después en functions.php coloque el siguiente código
<?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');
?>
ahora para enumerar el usuario de inicio de sesión actual que puede usar
<?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>
Puede obtener el usuario conectado actual de la siguiente manera
$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 />'; ?>
identifique esta variable $ current_user, puede encontrar todos los detalles del usuario en la matriz y el objeto que puede tomar de esta variable
-
No pidió la información de un solo usuario; pidió una lista de todos los usuarios registrados en este momento.
– trenoasis
23 de noviembre de 2015 a las 13:59
-
No pidió la información de un solo usuario; pidió una lista de todos los usuarios registrados en este momento.
– trenoasis
23 de noviembre de 2015 a las 13:59
hay plugin, aunque no lo he probado. usted puede obtener idea de esto. wordpress.org/plugins/wp-useronline
– Karan Thakkar
21 de febrero de 2014 a las 7:54