Muszę wyświetlić status online (online / offline) dla każdej strony autora (niestandardowy szablon strony autora).
is_user_logged_in () dotyczy tylko bieżącego użytkownika i nie mogę znaleźć odpowiedniego podejścia skierowanego do bieżącego autora, np. is_author_logged_in ()
Jakieś pomysły?
Odpowiedź
Jeden Trick Pony był na tyle miły, że przygotował kodowanie dla dwóch do trzech funkcji za pomocą transjentów, czego wcześniej nie używałem.
http://codex.wordpress.org/Transients_API
Dodaj to do 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);
}
}
}
Dodaj to do autor.php (lub innego szablonu strony):
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.';}
Druga odpowiedź (nie używać)
Ta odpowiedź jest dołączona w celach informacyjnych. Jak zauważył One Trick Pony, jest to niepożądane podejście, ponieważ baza danych jest aktualizowana przy każdym ładowaniu strony. Po dalszej analizie kod wydawał się raczej wykrywać status zalogowania bieżącego użytkownika niż dodatkowo dopasowywać go do bieżącego autora.
1) Zainstaluj tę wtyczkę: http://wordpress.org/extend/plugins/who-is-online/
2) Dodaj następujące elementy do szablonu strony:
//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>";
}