Her yazar sayfası için (özel yazar sayfası şablonu) çevrimiçi durumunu (çevrimiçi / çevrimdışı) görüntülemem gerekiyor.
is_user_logged_in () yalnızca geçerli kullanıcı için geçerlidir ve geçerli yazarı hedefleyen ilgili bir yaklaşım bulamıyorum, örneğin is_author_logged_in ()
Herhangi bir fikir?
Cevap
One Trick Pony, daha önce kullanmadığım bir şeyi geçici olarak kullanarak kodlamayı iki ila üç fonksiyona hazırlamak için kibardı.
http://codex.wordpress.org/Transients_API
Bunu functions.php dosyasına ekleyin:
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);
}
}
}
Bunu author.php (veya başka bir sayfa şablonuna) ekleyin:
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.';}
İkinci Cevap (kullanmayın)
Bu cevap referans için dahil edilmiştir. One Trick Pony tarafından belirtildiği gibi, bu her zaman yüklendiğinde veritabanı güncellendiğinden, bu istenmeyen bir yaklaşımdır. Daha fazla incelemeden sonra, kodun, mevcut yazara eklenmesi yerine yalnızca geçerli kullanıcının oturum açma durumunu algıladığı görülüyordu.
1) Bu eklentiyi yükleyin: http://wordpress.org/extend/plugins/who-is-online/
2) Aşağıdakileri sayfa şablonunuza ekleyin:
//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>";
}