ฉันต้องแสดงสถานะออนไลน์ (ออนไลน์ / ออฟไลน์) สำหรับแต่ละหน้าผู้แต่ง (เทมเพลตหน้าผู้แต่งกำหนดเอง)
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>";
}