Verwenden eines $ GET-Parameters von einer URL zum Umleiten zu einer URL (WordPress)

Ich benutze eine benutzerdefinierte Login-Seite mit einem Skript in der functions.php, die auf eine benutzerdefinierte “Fehler Login” -Seite redirect (Parameter zur Login-URL hinzufügen), so dass die Fehler auf der gleichen Seite anstelle der nativen Login-Seite angezeigt werden können.

In einigen Fällen enthält diese Anmeldeseite jedoch bereits einige Parameter, wenn jemand dorthin weitergeleitet wird, nachdem er versucht hat, auf eine private Seite zuzugreifen.

Beispielsweise :

  • Regelmäßiger Fall: Sie versuchen, auf: website.com/login zuzugreifen. Wenn beim Login ein Fehler auftritt, wird mein Skript auf website.com/login?login=empty umgeleitet und kann es erneut versuchen.

  • Problemfall: Sie versuchen auf website.com/protected-page/private zuzugreifen, sie werden automatisch auf website.com/login?members=%2Fprotected-page%2Fprivate%2 weitergeleitet. Wenn beim Anmelden ein Fehler auftritt, wird mein Skript tatsächlich auf website.com/login?login=empty umgeleitet (wie im normalen Fall). Was möchte ich erreichen, indem ich auf website.com/login umgeleitet werde? members =% 2Fprotected-page% 2Fprivate% 2 & login = leer, wenn ein Fehler auftritt.

Wenn Sie diesen “? Members” -Parameter in der URL beibehalten, kann das Formular nach einer erfolgreichen Anmeldung auf die vorherige Seite umgeleitet werden, auf die zuvor zugegriffen wurde. Ansonsten werden sie im normalen Fall zum allgemeinen Dashboard weitergeleitet.

Das Skript, das die Weiterleitung bei einem Fehler tatsächlich verwaltet, lautet wie folgt:

add_action (‘authenticate’, ‘check_username_password’, 1, 3); function check_username_password ($ login, $ username, $ password) {

$referrer = $_SERVER['HTTP_REFERER']; if( !empty( $referrer ) && !strstr( $referrer,'wp-login' ) && !strstr( $referrer,'wp-admin' ) ) { if( $username == "" || $password == "" ){ wp_redirect( get_permalink( 20 ) . "?login=empty" ); exit; } } 

Der wichtige Teil hier, der die Fehler-URL erzeugt, ist:

 wp_redirect( get_permalink( ID ) . "?login=empty" ); 

Ich kann meinen anderen UTL-Parameter mit “$ _GET [” members “] erhalten, wenn ich ein” echo $ _GET [“wlfrom”]; ” Es zeigt erfolgreich den Parameter auf der Seite an. Aber selbst wenn es so einfach aussieht, schaffe ich es nicht, diesen Parameter zur URL hinzuzufügen. Was ich bisher versucht habe:

 #1. wp_redirect( get_permalink( ID ) . "?members=" . $_GET["members"] . "?login=empty" ); #2. wp_redirect( get_permalink( ID ) . "?members=" . echo $_GET["members"] . "?login=empty" ); #3. $param = array('members'); wp_redirect( get_permalink( ID ) . "?members=" . $param . "?login=empty" ); //This one returns website.com/?members=array/?login=empty #4.$param = $_SERVER["PHP_SELF"]; wp_redirect( $param . "?login=empty" ); // This one I cannot use because it displays the native login URL, not my permalink, that's why I need to use "get_permalink" for the first part of the URL 

In letzter Zeit habe ich diese Lösung versucht, die wie die beste klang, die ich bisher hatte:

Neues verstecktes Feld im Login-Formular:

 <input type="hidden" name="members" value=""> 

Ersetzen: wp_redirect (get_permalink (ID). “? Login = leer”); durch

 $queryarg='?login=empty'; if(isset($_REQUEST['members']) && $_REQUEST['members']!=''){ $queryarg .='&members='$_REQUEST['members']; } wp_redirect( get_permalink( ID ) . $queryarg ); 

Aber diese Lösung ist zurückgekehrt:

 Parse error: syntax error, unexpected '$_REQUEST' (T_VARIABLE) on line 113. 

Die Zeile beinhaltete $ queryarg. = ‘& Members =’ $ _ REQUEST [‘members’]

Also jede Lösung, um das zu ermöglichen? Womit sollte ich “wp_redirect” füllen, um den Parameter aus der aktuellen URL zu verwenden?

Vielen Dank !

Solutions Collecting From Web of "Verwenden eines $ GET-Parameters von einer URL zum Umleiten zu einer URL (WordPress)"

Ich schlage vor, add_query_arg zu untersuchen . Du kannst es so benutzen:

 $params_array = array(); foreach($_GET as $key => $param){ $params_array[] = $key . '=' . urlencode($param); } $url = get_permalink(ID) . '?' . implode('&', $params_array); wp_redirect( esc_url_raw( add_query_arg( 'login', 'empty', $url ) ) ); 

oder Sie können mehrere Parameter wie folgt hinzufügen:

 $params_array = array(); foreach($_GET as $key => $param){ $params_array[] = $key . '=' . urlencode($param); } $url = get_permalink(ID) . '?' . implode('&', $params_array); $args = array( 'login' => 'empty' 'param2' => 1 ); wp_redirect( esc_url_raw( add_query_arg( $args, $url ) ) ); 

Es gibt auch einen optionalen $url Parameter, ohne dass $_SERVER['REQUEST_URI'] (oder die aktuelle URL) als Betreff-URL verwendet wird, und da es die aktuelle URL (mit Parametern) ist, die Sie brauchen, wird nur die neue angehängt Param (s) bis zum Ende Ihrer URL.

Beachten esc_url_raw die function esc_url_raw , die function add_query_arg wird standardmäßig nicht add_query_arg und ruft “späte Escape” auf. Technisch könnten Sie esc_url auch verwenden, aber es wird nicht benötigt, da Sie den Link nicht anzeigen.