WP Login bildet Aktions-URLs, die im Browser als hübsche URLs angezeigt werden (z. B. mit Passwort wiederherstellen)

Ich würde gerne die wp native login / register / restore password / .. functionalität verwenden, aber statt wp-login.php hübsche URLs anzeigen

Ich habe mir den corecode angeschaut und festgestellt, dass die meisten Anmeldeformulare eine fest codierte Aktions-URL haben. Zum Beispiel hat das Wiederherstellungskennwort die folgende Aktions-URL

<form name="resetpassform" id="resetpassform" action="" method="post"> 

Wenn ich also auf “Passwort zurücksetzen” klicke, wird die Information an die Datei wp-login.php mit den angegebenen Aktions-, Schlüssel- und Login-Variablen übergeben.

Wenn info die validation nicht besteht, wird das Formular erneut angezeigt und die URL im Browser ist diejenige, die in der Aktion des Formulars angegeben ist. In diesem Fall ist es http://example.com/wp-login.php?action=resetpass&key=xyz&login=zyx .

Ich möchte es http://example.com/password-restore?action=resetpass&key=xyz&login=zyx

Damit dies funktioniert, habe ich die folgende Lösung ausprobiert. Ich lande jedoch in der Umleitungsschleife.

Schritt 1. Die anfängliche Passwort-URL für die Wiederherstellung lautet http://example.com/wp-login.php?action=rp&key=xyz&login=zyx . Um es hübsch zu machen, habe ich eine Re-Write-Regel hinzugefügt:

 add_action( 'init', 'pretty_login_urls' ); function pretty_login_urls() { add_rewrite_rule( 'password-restore?([^/]+)/?$', "wp-login.php?$1", 'top' ); } 

Die ursprüngliche URL zum Wiederherstellen des Formulars funktioniert.

Schritt 2. Wenn ich jedoch ein nicht übereinstimmendes Passwort einreiche, wird das Formular erneut angezeigt und die URL lautet http://example.com/wp-login.php?action=resetpass&key=xyz&login=zyx . Beachten Sie, dass sich diese Aktion geändert hat.

Hier bin ich gestapelt. Ich möchte diese URL als hübsch anzeigen. Ich habe die folgende Lösung versucht, wp-login.php zu einer hübschen URL umzuleiten:

 add_action( 'login_init', 'pretty_login_urls_form_action_fix' ); function pretty_login_urls_form_action_fix(){ $action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : ''; if( in_array( $action, array('rp', 'resetpass') ) ){ $url = home_url( '/password-restore?action='. $action .'&key=' . urlencode( $_GET['key'] ) . '&login=' . urlencode( $_GET['login'] ), 'login_post' ); wp_redirect( $url ); exit; } } 

Damit lande ich jedoch in der Umleitungsschleife.

Gibt es eine Möglichkeit, dass die URLs in der Adressleiste des Browsers hübsch angezeigt werden, wenn die Seite über die Aktions-URL eines Formulars erreicht wird.

Ich würde wirklich alle Tipps schätzen.

Vielen Dank, Dascha

Solutions Collecting From Web of "WP Login bildet Aktions-URLs, die im Browser als hübsche URLs angezeigt werden (z. B. mit Passwort wiederherstellen)"

Schritt 2. Wenn ich jedoch ein nicht übereinstimmendes Passwort einreiche, wird das Formular erneut angezeigt und die URL lautet http://example.com/wp-login.php?action=resetpass&key=xyz&login=zyx . Beachten Sie, dass sich diese Aktion geändert hat.

Wenn ich dies mit einem ungültigen Schlüssel versuche, werde ich auf http://example.com/wp-login.php?action=lostpassword&error=invalidkey umgeleitet.

Wie auch immer, die Endlosschleife tritt auf, weil Sie die Bedingung in_array( $action, array('rp', 'resetpass') ) für die URL, auf die Sie redirect, wahr bleiben, so dass Sie in einer Umleitungsschleife landen.

Die Lösung besteht darin, zu überprüfen, ob die angeforderte URL von der Weiterleitungs-URL abweicht:

 function pretty_login_urls_form_action_fix(){ $action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : ''; if( in_array( $action, array('rp', 'resetpass') ) ){ $requested_url = is_ssl() ? 'https://' : 'http://'; $requested_url .= $_SERVER['HTTP_HOST']; $requested_url .= $_SERVER['REQUEST_URI']; $redirect_url = home_url( '/password-restore?action='. $action .'&key=' . urlencode( $_GET['key'] ) . '&login=' . urlencode( $_GET['login'] ), 'login_post' ); if( $redirect_url !== $requested_url ){ wp_redirect( $redirect_url ); exit; } } }