Necesito mostrar el estado en línea (en línea / fuera de línea) para cada página de autor (plantilla de página de autor personalizada).
is_user_logged_in () solo se aplica al usuario actual y no puedo encontrar un enfoque relevante dirigido al autor actual, por ejemplo, is_author_logged_in ()
¿Algunas ideas?
Responder
One Trick Pony tuvo la amabilidad de preparar la codificación para dos o tres funciones usando transitorios, algo que no había usado antes.
http://codex.wordpress.org/Transients_API
Agregue esto 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);
}
}
}
Agregue esto a author.php (u otra plantilla de página):
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.';}
Segunda respuesta (no usar)
Esta respuesta se incluye como referencia. Como señaló One Trick Pony, este es un enfoque indeseable porque la base de datos se actualiza en cada carga de página. Después de un mayor escrutinio, el código solo parecía detectar el estado de inicio de sesión del usuario actual en lugar de emparejarlo adicionalmente con el autor actual.
1) Instale este complemento: http://wordpress.org/extend/plugins/who-is-online/
2) Agregue lo siguiente a su plantilla de página:
//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>";
}