Мені потрібно відображати статус в Інтернеті (онлайн / офлайн) для кожної сторінки автора (користувацький шаблон авторської сторінки).
is_user_logged_in () стосується лише поточного користувача, і я не можу знайти відповідний підхід, орієнтований на поточного автора, наприклад is_author_logged_in ()
Будь-які ідеї?
Відповідь
Один Трік Поні був досить люб’язним, щоб підготувати кодування двох-трьох функцій за допомогою перехідних процесів, чого я раніше не використовував.
http://codex.wordpress.org/Transients_API
Додайте це до function.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>";
}