Ich muss den Onlinestatus (online / offline) für jede Autorenseite (benutzerdefinierte Autorenseitenvorlage) anzeigen.
is_user_logged_in () gilt nur für den aktuellen Benutzer und ich kann keinen relevanten Ansatz für den aktuellen Autor finden, z. B. is_author_logged_in ()
Irgendwelche Ideen?
Antworten
Ein Trick Pony war so nett, die Codierung für zwei bis drei Funktionen mit Hilfe von Transienten vorzubereiten, was ich vorher nicht benutzt hatte.
http://codex.wordpress.org/Transients_API
Füge dies zu functions.php hinzu:
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);
}
}
}
Fügen Sie dies zu author.php (oder einer anderen Seitenvorlage) hinzu:
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.';}
Zweite Antwort (nicht verwenden)
Diese Antwort dient als Referenz. Wie von One Trick Pony hervorgehoben, ist dies ein unerwünschter Ansatz, da die Datenbank bei jedem Laden der Seite aktualisiert wird. Nach einer weiteren Überprüfung schien der Code nur den Anmeldestatus des aktuellen Benutzers zu erkennen, anstatt ihn zusätzlich mit dem aktuellen Autor abzugleichen.
1) Installiere dieses Plugin: http://wordpress.org/extend/plugins/who-is-online/
2) Fügen Sie Ihrer Seitenvorlage Folgendes hinzu:
//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>";
}