Betreibt man eine WordPress Mitgliederseite möchte man wissen wie aktiv die eigenen Benutzer / Subscriber sind. Dazu kann die Benutzer Tabelle im WP-Admin erweitern und bei jedem Login den Timestamp in ein User Meta Feld schreiben.
Gewünschtes Ergebnis:
Die komplette Klasse zum Kopieren findest du ganz unten.
Login Timestamp abspeichern
Als erstes müssen wir den Login Zeitpunkt des Benutzers erfassen. Dazu speichern wir einfach einen Timestamp mit time()
in ein User Meta Feld update_user_meta()
/**
* Speichert beim User Login den Timestamp als User Meta Feld ab.
*/
public function save_login_time( $user_login, $user ) {
update_user_meta( $user->ID, 'last_login', time() );
}
Den Timestamp in menschlich lesbarer Form in die Admin-Spalte ausgeben
Um den Wert für unsere weiter unten angelegte Admin Spalte auszugeben müssen wir wiederum das User Meta Field abrufen, den Timestamp mit der Funktion human_time_diff()
umwandeln und zurückgeben.
- X Sekunden
- X Minuten
- X Tagen
- X Wochen
- X Monaten
/**
* Gibt den Timestamp des letzten Logins zurück.
*/
public function get_login_time( $user_id ) {
$last_login = get_user_meta( $user_id, 'last_login', true );
$the_login_date = human_time_diff( $last_login );
if ( '' === $last_login ) {
// Gibt 'Nie' zurück, wenn der User sich noch nie eingeloggt hat.
return 'Nie';
} else {
// Gibt den Timestamp in menschlich lesbarem Format zurück.
return $the_login_date;
}
}
Die Admin Spalte “letzer Login” einfügen und mit Werten befüllen
Als erstes legen wir die neue Spalte an.
/**
* Erweitert die Userübersicht mit der Spalte: 'letzter Login'.
*/
public function columns_head( $defaults ) {
$defaults['lastlogin'] = 'letzer Login';
return $defaults;
}
Und mit der folgenden Function ziehen wir den Wert (Timestamp) aus dem Benutzer Meta Feld und geben ihn in die Spalte aus.
Hier verwenden wir die vorher angelegte Funktion get_login_time()
/**
* Führt die Funktion 'get_login_time' aus und gibt den Wert zurück in die Admin-Spalte.
*/
public function column_value( $val, $column, $user_id ) {
switch ( $column ) {
// Wenn die Spalte die 'lastlogin' Spalte ist.
case 'lastlogin':
$val = self::get_login_time( $user_id );
break;
}
return $val;
}
Möchtest du mehr über Admin-Spalten erfahren kannst du dir diesen Beitrag ansehen: WordPress: Spalten im Adminbereich mit PHP hinzufügen
Der Klassen Konstruktor, Filter und Actions registrieren
Zum Initialisieren benötigen wir noch die Klassen __construct() Funktion
public function __construct() {
add_action( 'wp_login', [ $this, 'save_login_time'], 10, 2 );
add_filter( 'manage_users_columns', [ $this, 'columns_head'], 10, 3);
add_action( 'manage_users_custom_column', [ $this, 'column_value'], 10, 3);
}
Die komplette Klasse zum Kopieren in dein Theme oder Plugin
class LastLogin {
public function __construct() {
add_action( 'wp_login', [ $this, 'save_login_time'], 10, 2 );
add_filter( 'manage_users_columns', [ $this, 'columns_head'], 10, 3);
add_action( 'manage_users_custom_column', [ $this, 'column_value'], 10, 3);
}
/**
* Speichert beim User Login den Timestamp als User Meta Feld ab.
*/
public function save_login_time( $user_login, $user ) {
update_user_meta( $user->ID, 'last_login', time() );
}
/**
* Gibt den Timestamp des letzten Logins zurück.
*/
public function get_login_time( $user_id ) {
$last_login = get_user_meta( $user_id, 'last_login', true );
$the_login_date = human_time_diff( $last_login );
if ( '' === $last_login ) {
// Gibt 'Nie' zurück, wenn der User sich noch nie eingeloggt hat.
return 'Nie';
} else {
// Gibt den Timestamp in menschlich lesbarem Format zurück.
return $the_login_date;
}
}
/**
* Erweitert die Userübersicht mit der Spalte: 'letzter Login'.
*/
public function columns_head( $defaults ) {
$defaults['lastlogin'] = 'letzer Login';
return $defaults;
}
/**
* Führt die Funktion 'get_login_time' aus und gibt den Wert zurück in die Admin-Spalte.
*/
public function column_value( $val, $column, $user_id ) {
switch ( $column ) {
// Wenn die Spalte die 'lastlogin' Spalte ist.
case 'lastlogin':
$val = self::get_login_time( $user_id );
break;
}
return $val;
}
}
new LastLogin();