Kann ich den Standard-Registrierungslink ändern (ohne htaccess)?

Ich verwende URL wie «wp-login.php? Action = register & role = patient» und «register_form» Hook für zusätzliche Eingabemasken, die von URLs wie folgt abhängen:

add_action('register_form','add_extra_role_fields'); function add_extra_role_fields() { if (isset($_GET['role'])) { $user_type = $_GET['role']; } if (isset($user_type) && $user_type == "patient") [...] if (isset($user_type) && $user_type == "doctor") [...] 

Problem : WordPress leitet Benutzer nach Formularvalidierung mit Fehler zu http://example.com/wp-login.php?action=register statt http://example.com/wp-login.php?action=register&role=patient und Alle Logik ist gebrochen.

Frage : Kann WordPress den Benutzer auf die vorherige URL redirect?? Action = register & role = doctor »(nicht default«? Action = register »)?

Lösung : Danke Jan Fabry :).

 if ( isset($_REQUEST['role']) && ( ($_REQUEST['role'] == 'patient') OR ($_REQUEST['role'] == 'doctor') ) ) { add_filter( 'site_url', 'doctor_site_url', 10, 4 ); function doctor_site_url( $url, $path, $scheme, $blog_id ) { if ( 'login_post' == $scheme ) { $url .= '&role='.$_REQUEST['role']; } return $url; } } 

Solutions Collecting From Web of "Kann ich den Standard-Registrierungslink ändern (ohne htaccess)?"

Wenn Sie diese Informationen in $_GET behalten $_GET , müssen Sie die action URL des Formulars ändern. Sie können dies tun, indem Sie in site_url :

 add_filter( 'site_url', 'wpse18418_site_url', 10, 4 ); function wpse18418_site_url( $url, $path, $scheme, $blog_id ) { if ( 'login_post' == $scheme ) { $url .= '&role=doctor'; // Or do this dynamically } return $url; } 

Aber anstatt immer in $_GET , könnte es eine Lösung sein, das $_REQUEST in einem versteckten Feld zu speichern und stattdessen $_REQUEST überprüfen – es enthält sowohl $_GET als auch $_POST .