Мне нужно отображать онлайн-статус (онлайн / оффлайн) для каждой страницы автора (пользовательский шаблон страницы автора).
is_user_logged_in () применяется только к текущему пользователю, и я не могу найти подходящий подход, нацеленный на текущего автора, например is_author_logged_in ()
Любые идеи?
Ответ
Один Trick Pony был достаточно любезен, чтобы подготовить кодирование для двух-трех функций с использованием переходных процессов, чего я раньше не использовал.
http://codex.wordpress.org/Transients_API
Добавьте это в 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);
}
}
}
Добавьте это в author.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.';}
Второй ответ (не используйте)
Этот ответ включен для справки. Как отмечает One Trick Pony, это нежелательный подход, поскольку база данных обновляется при каждой загрузке страницы. После дальнейшего изучения код, казалось, только обнаруживал статус входа текущего пользователя, а не дополнительно сопоставлял его с текущим автором.
1) Установите этот плагин: http://wordpress.org/extend/plugins/who-is-online/
2) Добавьте следующее в шаблон вашей страницы:
//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>";
}