Admin an ein anderes Login als Benutzer senden?

Ich habe eine separate Login-Seite auf /login/ und wp-login.php dorthin weitergeleitet – ich habe auch ein paar WP-Login-bezogene Hooks wie wp_login_failed damit Leute dorthin weitergeleitet werden.

Ich habe mich jedoch entschieden, Admins weiterhin vom Standard-Ort aus anmelden zu können und dies für die Benutzer zu behalten – kein Problem, da ich nur Benutzer zu /login/ verweisen und die Weiterleitungen entfernen kann.

Das Problem mit dem Fehler ist, dass die /wp-login.php wieder zu /wp-login.php werden und wenn ich die Weiterleitungen zurück lege, werden Admin-Benutzer stattdessen an /login/ .

Wie geht man damit um?

Solutions Collecting From Web of "Admin an ein anderes Login als Benutzer senden?"

Sie können dies mit dem login_redirect Filter tun.

 function my_login_redirect( $redirect_to, $request, $user ) { global $user; if ( isset( $user->roles ) && is_array( $user->roles ) ) { //check for admins if ( in_array( 'administrator', $user->roles ) ) { // redirect them to the default place //make wp-admin as your default place, if you customized it return $redirect_to; } else { return home_url('/login/'); } } else { return $redirect_to; } } add_filter( 'login_redirect', 'my_login_redirect', 10, 3 ); 

AKTUALISIEREN

Ich wp_login_form , dass Sie wp_login_form für die benutzerdefinierte Anmeldeseite verwenden und bereits wp_login_form sind, um sich zu authenticate , um leeres Benutzername- und / oder Passwort-Problem zu behandeln.

Wir können $_SERVER['HTTP_REFERER'] , um zu überprüfen, woher die Anfrage kam und redirect.

 function wpse9845_my_awesome_login_fail( $username ) { $referrer = $_SERVER['HTTP_REFERER']; // where did the post submission come from? // if there's a valid referrer, and it's not the default wp-login.php ot wp-admin screen if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') ) { wp_redirect( $referrer ); exit; } } add_action( 'wp_login_failed', 'wpse9845_my_awesome_login_fail' ); 

Es gibt eine schlechte Seite des obigen Codes: $_SERVER['HTTP_REFERER'] wird nicht von allen Benutzeragenten unterstützt.

Hinweis ( von php.net ): HTTP_REFERER – Die Adresse der Seite (falls vorhanden), durch die der Benutzeragent auf die aktuelle Seite verwiesen wurde. Dies wird vom Benutzeragenten festgelegt. Nicht alle Benutzeragenten werden dies festlegen, und einige bieten die Möglichkeit, HTTP_REFERER als eine function zu ändern. Kurz gesagt, es kann nicht wirklich vertraut werden.

Der beste Weg, dies zu tun, ist eine vollständig benutzerdefinierte Login-Seite / Formular, zusammen mit der Authentifizierung. Hier ist ein sehr gutes Tutorial .