Devo visualizzare lo stato online (online / offline) per ciascuna pagina dell'autore (modello di pagina dell'autore personalizzato).
is_user_logged_in () si applica solo all'utente corrente e non riesco a trovare un approccio pertinente indirizzato all'autore corrente, ad esempio is_author_logged_in ()
Qualche idea?
Risposta
One Trick Pony è stato così gentile da preparare la codifica per due o tre funzioni usando i transienti, qualcosa che non avevo mai usato prima.
http://codex.wordpress.org/Transients_API
Aggiungi questo a Functions.php:
add_action('wp', 'update_online_users_status');
function update_online_users_status(){
if(is_user_logged_in()){
// get the online users list
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);
}
}
}
Aggiungi questo a author.php (o un altro modello di pagina):
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.';}
Seconda risposta (non usare)
Questa risposta è inclusa come riferimento. Come sottolineato da One Trick Pony, questo è un approccio indesiderabile perché il database viene aggiornato ad ogni caricamento della pagina. Dopo un ulteriore esame, il codice sembrava rilevare solo lo stato di accesso dell'utente corrente anziché abbinarlo ulteriormente all'autore corrente.
1) Installa questo plugin: http://wordpress.org/extend/plugins/who-is-online/
2) Aggiungi quanto segue al tuo modello di pagina:
//Set the $curauth variable
if(isset($_GET['author_name'])) :
$curauth = get_userdatabylogin($author_name);
else :
$curauth = get_userdata(intval($author));
endif;
// Define the ID of whatever authors page is being viewed.
$authortemplate_id = $curauth->ID;
// Connect to database.
global $wpdb;
// Define table as variable.
$who_is_online_table = $wpdb->prefix . 'who_is_online';
// Query: Count the number of user_id's (plugin) that match the author id (author template page).
$onlinestatus_check = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM ".$who_is_online_table." WHERE user_id = '".$authortemplate_id."';" ) );
// If a match is found...
if ($onlinestatus_check == "1"){
echo "<p>User is <strong>online</strong> now!</p>";
}
else{
echo "<p>User is currently <strong>offline</strong>.</p>";
}