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>";
}
Antworten:
Ich würde Transienten verwenden , um dies zu tun:
Erstellen Sie eine User-Online-Update-Funktion, die Sie einbinden
init
. es würde ungefähr so aussehen:Dies sollte also bei jedem Laden der Seite ausgeführt werden, der Übergang wird jedoch nur aktualisiert, wenn dies erforderlich ist. Wenn Sie eine große Anzahl von Benutzern online haben, möchten Sie möglicherweise den Zeitrahmen für die "letzte Aktivität" verlängern, um die Anzahl der Datenbankschreibvorgänge zu verringern. Für die meisten Websites sind jedoch 15 Minuten mehr als ausreichend ...
Um jetzt zu überprüfen, ob der Benutzer online ist, schauen Sie einfach in diesen Übergang, um festzustellen, ob ein bestimmter Benutzer online ist, wie oben beschrieben:
Der Übergang läuft in 30 Minuten ab, wenn überhaupt keine Aktivität stattfindet. Wenn Sie jedoch ständig Benutzer online haben, läuft dieser nicht ab. Bereinigen Sie diesen Übergang daher in regelmäßigen Abständen, indem Sie eine andere Funktion für ein zweimal tägliches Ereignis oder ähnliches aktivieren. Diese Funktion würde alte
$logged_in_users
Einträge entfernen ...quelle
function user_online_update() {
[IHR CODE]}add_action('init', 'user_online_update');
in meine functions.php-Datei eingefügt. Ich erhalte einen Serverfehler, der darauf hindeutet, dass etwas nicht richtig analysiert wurde oder ich Ihre Anweisungen falsch interpretiert habe.$time_limit
mit15
und stellen Sie sicher, dass Sie die PHP-Tags korrekt geöffnet / geschlossen haben ...Meines Wissens gibt es keine Möglichkeit, dies mit den integrierten WordPress-Funktionen zu tun, aber lassen Sie sich davon nicht entmutigen. schreibe ein Plugin!
Eine Möglichkeit besteht darin, eine neue Tabelle in der Datenbank zu erstellen, die lediglich die letzte Aktivität des Benutzers auf der Site protokolliert. Sie könnten auch eine Einstellungsseite für Ihr Plugin haben, die festlegt, wie lange ein registrierter Benutzer als "Angemeldet" eingestuft wird.
Sie würden dies mit einem WordPress-Hook implementieren . Ich beginne damit, mich anzumelden. Sobald sich ein Benutzer anmeldet, protokolliert Ihr Plugin die Zeit in der Datenbank. Sie können dann andere Dinge untersuchen, z. B. den Status auf "Abwesend" setzen, wenn sie auf "Abmelden" klicken, oder "Inaktiv", wenn ihre Anmeldezeit mehr als zwei Stunden zurückliegt.
Sie würden auf ein Problem stoßen, wenn sie angemeldet und auf der Site aktiv sind, aber nach diesem zweistündigen Fenster. In diesem Fall müssten Sie in den Abschnitt wp-admin eingebunden sein, damit Ihre Datenbank bei jeder Aktion in wp-admin auf die aktuelle Uhrzeit aktualisiert wird.
Dann müssten Sie für die Posts zwei Dinge tun: den Autor des aktuellen Posts abrufen:
Fragen Sie dann Ihre Datenbank ab, um festzustellen, ob sie angemeldet sind:
quelle