WordPress Login unterbinden

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 12 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

Nicht immer ist ein Login in WordPress gewollt – so habe ich für meine lokale Entwicklungsumgebung das Login deaktiviert, insofern ich es nicht brauche. Bisher sind mir zwei Möglichkeiten dieser Anforderung begegnet und diese möchte ich euch kurz vorstellen.
Entscheidet selbst, welche für euch der richtige Weg ist, wenn ihr das Login nicht bzw. nicht in dem Standard-Zeitrahmen benötigt.

Auf die harte Tour

Im ersten Codeschnippsel möchte ich meine eigene Lösung vorstellen, auf die man als erstes trifft, wenn man nach einer Lösung für diese Anforderung im Core sucht. WordPress gibt die Möglichkeit, einige Funktion direkt zu ersetzen, also ohne Plugin-Schnittstelle via Hooks. Alle Funktionen in diesem Zusammenhang findet man in wp-includes/pluggable.php. Dort findet man seit Version 2.5 von WordPress die Funktion wp_validate_auth_cookie(). Diese kümmert sich um die Prüfung des Login und diese ersetze ich in meiner lokalen Entwicklungsumgebung, die von Außen aus dem Netz nicht erreichbar ist! Die Funktion gibt bei korrektem Login die ID des Users zurück und genau das tue ich – die ID 1 für den Admin, sollte es geben, wenn dieser nach der Installation nicht verändert wurde.
Diese folgende kleine Funktion habe ich in der wp-config.php abgelegt.


/**
 * Set authentication cookie.
 *
 * @param string $cookie Optional. If used, will validate contents instead of cookie's
 * @param string $scheme Optional. The cookie scheme to use: auth, secure_auth, or logged_in
 * @return bool|int False if invalid cookie, User ID if valid.
 */
//*
function wp_validate_auth_cookie( $cookie = '', $scheme = '' ) {
	$user_ID = (int) 1; // admin user id
	return $user_ID;
}
//*/

Der Block-Kommentar-Trick

Nun braucht man unter bestimmten Bedingungen das Login für verschieden Tests oder Anforderungen und dann muss die Funktion auskommentiert werden. In diesem Zusammenhang erkläre ich kurz die Kommentar-Zeichen in diesem Code, die vielleicht dem einen oder anderen auffallen und nichts sagen.

Es geht um folgende Zeichen:


//*
function ...
//*/

Dabei muss ich lediglich die führenden Slashs ändern in /* und der Inhalt ist auskommentiert, mehr nicht. Dieser Tipp stammt von Aleem Bawany; in seinem Artikel erklärt er es genau.

Alternativ kann man sicher auch eine Option erstellen und viele andere Wege gehen – dies ist mein Weg und der ist einfach und kontrollierbar.

Die Zeit des Cookie erweitern

Nun ist mir auf StackExchange eine weitere Lösung aufgefallen, die wesentlich sicherer ist und eventuell auch in Live-Sites einsetzbar ist. Dazu wird die Zeit des Cookie angesprochen und via Hook verändert. Im Standard von WordPress ist die „Erinnere dich an mich“-Checkbox auf 14 Tage gesetzt und die folgende Funktion ändert diesen Zeitrahmen auf ein Jahr. Der eigentliche Login bleibt also, nur die Zeit, wie lange das Login gültig ist, ändert sich.


function keep_me_logged_in_for_1_year( $expirein ) {
    return 31556926; // 1 year in seconds
}
add_filter( 'auth_cookie_expiration', 'keep_me_logged_in_for_1_year' );

Diese Lösung wurde von Alex (Viper007Bond) veröffentlicht und es lohnt die Kommentare im Thread zu lesen, insbesondere zu create_function innerhalb des Filter-Hook.
Diese Funktion gehört in ein Plugin oder die functions.php des Themes als Not-Alternativ.

Zwei Lösungen mit sehr unterschiedlichen Ansätzen und Einsetzungsscenarios. Hier ist Verantwortung wichtig beim Einsatz. Vielleicht gibt es andere Lösungen, Hinweise wie immer gern in den Kommentaren.

Von Frank Bültge

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.