Saya perlu menampilkan status online (online / offline) untuk setiap halaman penulis (template halaman penulis kustom).
is_user_logged_in () hanya berlaku untuk pengguna saat ini dan saya tidak dapat menemukan pendekatan yang relevan dengan menargetkan penulis saat ini misalnya is_author_logged_in ()
Ada ide?
Menjawab
One Trick Pony berbaik hati untuk mempersiapkan pengkodean untuk dua hingga tiga fungsi menggunakan transien, sesuatu yang belum pernah saya gunakan sebelumnya.
http://codex.wordpress.org/Transients_API
Tambahkan ini ke 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);
}
}
}
Tambahkan ini ke author.php (atau templat halaman lain):
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.';}
Jawaban Kedua (jangan gunakan)
Jawaban ini termasuk untuk referensi. Seperti yang ditunjukkan oleh One Trick Pony, ini adalah pendekatan yang tidak diinginkan karena database diperbarui pada setiap halaman memuat. Setelah diteliti lebih lanjut, kode tersebut tampaknya hanya mendeteksi status login pengguna saat ini daripada mencocokkannya dengan penulis saat ini.
1) Instal plugin ini: http://wordpress.org/extend/plugins/who-is-online/
2) Tambahkan yang berikut ke templat halaman Anda:
//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>";
}