Julian Lang Julian Lang
Tutorials

Den letzten Login eines WordPress Benutzers erfassen

By Julian Lang 10. Mai 2022

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();

War der Beitrag hilfreich?

admin-spaltenBenutzerhuman_time_diff()Last Logintime()
Author Julian Lang

ist PHP Entwickler und möchte hier Einsteigern ein bisschen Zeit sparen indem er seine Ideen teilt. Arbeitet außerdem als Allrounder bei docrelations.de und entwickelt zwei coole Projekte: jadento.de | lifeisabinge.com

  • Website
Prev Post

Autor von der oEmbed (Discord) Vorschau entfernen

10. Mai 2022 1 Minute Lesezeit
Next Post

SPF, DKIM, DMARC und BIMI — Hands-On Guide

12. Mai 2022 5 Minuten Lesezeit

Ähnliche Posts

WordPress Gutenberg Block Filter: Gallery

20. Mai 2022

SPF, DKIM, DMARC und BIMI — Hands-On Guide

12. Mai 2022

WordPress Menü Walker: Für Uikit3 Dropdown optimieren.

7. Mai 2022

Schreib deine Meinung Cancel Reply

  • Impressum
  • Datenschutz

naufwärts
Julian Lang

    Type above and press Enter to search. Press Esc to cancel.