Tôi cần hiển thị trạng thái trực tuyến (trực tuyến / ngoại tuyến) cho mỗi trang tác giả (mẫu trang tác giả tùy chỉnh).
is_user_logged_in () chỉ áp dụng cho người dùng hiện tại và tôi không thể tìm thấy một cách tiếp cận phù hợp nhắm mục tiêu đến tác giả hiện tại, ví dụ: is_ mượt_logged_in ()
Có ý kiến gì không?
Câu trả lời
One Trick Pony rất tốt bụng khi chuẩn bị mã hóa cho hai đến ba chức năng bằng cách sử dụng tạm thời, điều mà trước đây tôi chưa từng sử dụng.
http://codex.wordpress.org/Transrons_API
Thêm phần này vào hàm.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);
}
}
}
Thêm phần này vào Author.php (hoặc một mẫu trang khác):
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.';}
Câu trả lời thứ hai (không sử dụng)
Câu trả lời này được bao gồm để tham khảo. Như One Trick Pony đã chỉ ra, đây là cách tiếp cận không thể chấp nhận được vì cơ sở dữ liệu được cập nhật trên mỗi lần tải trang. Sau khi xem xét kỹ hơn, mã dường như chỉ phát hiện trạng thái đăng nhập của người dùng hiện tại thay vì khớp với mã tác giả hiện tại.
1) Cài đặt plugin này: http://wordpress.org/extend/plugins/who-is-online/
2) Thêm phần sau vào mẫu trang của bạn:
//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>";
}