J'utilise le code d'état de l'utilisateur Comment vérifier si un utilisateur (utilisateur non actuel) est connecté? . Sur la page de profil de l'auteur cela fonctionne bien (merci les gars). Mais si je mets sur la page d'archive, au bas de l'article, cela ne fonctionne pas.
functions.php
add_action('wp', 'update_online_users_status');
function update_online_users_status(){
if(is_user_logged_in()){
if(($logged_in_users = get_transient('users_online')) === false) $logged_in_users = array();
$current_user = wp_get_current_user();
$current_user = $current_user->ID;
$current_time = current_time('timestamp');
if(!isset($logged_in_users[$current_user]) || ($logged_in_users[$current_user] < ($current_time - (15 * 60)))){
$logged_in_users[$current_user] = $current_time;
set_transient('users_online', $logged_in_users, 30 * 60);
}
}
}
author.php
<?php
function is_user_online($user_id) {
// get the online users list
$logged_in_users = get_transient('users_online');
// online, if (s)he is in the list and last activity was less than 15 minutes ago
return isset($logged_in_users[$user_id]) && ($logged_in_users[$user_id] > (current_time('timestamp') - (15 * 60)));
}
$passthis_id = $curauth->ID;
if(is_user_online($passthis_id)){echo 'User is online.';}
else {echo'User is not online.';}
?>
EDITL'OP veut "afficher le statut au bas de chaque message sur la page d'archive".
On dirait que vous êtes proche de celui-ci.
Déplacer cette fonction:
function is_user_online( $user_id ) {
// get the online users list
$logged_in_users = get_transient( 'users_online' );
// online, if (s)he is in the list and last activity was less than 15 minutes ago
return isset( $logged_in_users[$user_id] ) && ( $logged_in_users[$user_id] > ( current_time( 'timestamp' ) - ( 15 * 60 ) ) );
}
dans votre fichier functions.php et supprimez-le de tout autre fichier. Dans la boucle, voici le code que vous voudrez utiliser:
<?php
global $post;
if( is_user_online( $post->post_author ) ) : ?>
<p>User is online</p>
<?php else : ?>
<p>User is offline</p>
<?php endif; ?>