Использование параметра $ GET из URL-адреса для перенаправления на URL-адрес (WordPress)

Я использую пользовательскую страницу входа в систему с скриптом в функции functions.php, который перенаправляет на пользовательскую страницу регистрации ошибок (добавление параметров в URL-адрес входа), поэтому он может отображать ошибки на одной странице, а не на собственной странице входа.

Но в некоторых случаях эта страница входа в систему уже содержит некоторые параметры, когда кто-то перенаправляется туда после попытки доступа к частной странице.

Например :

  • Обычный случай: они пытаются получить доступ: website.com/login. Если при попытке войти в систему возникает ошибка, мой сценарий перенаправляется на сайт website.com/login?login=empty, и они могут попробовать еще раз.

  • Проблемный случай: они пытаются получить доступ к website.com/protected-page/private, они автоматически перенаправляются на сайт website.com/login?members=%2Fprotected-page%2Fprivate%2. Если при попытке войти в систему возникла ошибка, мой сценарий действительно перенаправляется на сайт website.com/login?login=empty (то же самое, что и в обычном случае), и что я пытаюсь достичь, это перенаправление на website.com/login? members =% 2Fprotected-page% 2Fprivate% 2 & login = empty при возникновении ошибки.

Сохранение этого параметра «? Members» в URL-адресе позволяет форме перенаправлять на предыдущую страницу, к которой они пытались получить доступ, после успешного входа в систему. В противном случае с обычным случаем они перенаправляются на общую панель.

Скрипт, который фактически управляет перенаправлением, когда ошибка такова:

add_action ('authenticate', 'check_username_password', 1, 3); функция 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; } } 

Таким образом, важная часть здесь, которая создаст URL-адрес ошибки:

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

Я могу получить свой другой параметр UTL с «$ _GET [" members "]", если я делаю «echo $ _GET [" wlfrom "]; он успешно отображает параметр на странице. Но даже если это выглядит так просто, мне не удается добавить этот параметр в URL. То, что я пробовал до сих пор:

 #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 

В последнее время я пробовал это решение, которое звучало как лучшее, что у меня было до сих пор:

Новое скрытое поле в форме входа:

 <input type="hidden" name="members" value="<?php echo @$_REQUEST['members']; ?>"> 

заменяя: wp_redirect (get_permalink (ID). "? login = empty"); от

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

Но это решение вернулось:

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

В строке участвовали $ queryarg. = '& Members =' $ _ REQUEST ['members']

Итак, любое решение, чтобы это произошло? Что мне следует заполнить «wp_redirect», чтобы использовать параметр из текущего URL?

Спасибо !

Solutions Collecting From Web of "Использование параметра $ GET из URL-адреса для перенаправления на URL-адрес (WordPress)"

Я предлагаю исследовать add_query_arg . Вы можете использовать его следующим образом:

 $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 ) ) ); 

или вы можете добавить несколько параметров, например:

 $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 ) ) ); 

Существует также необязательный параметр $url , без него $_SERVER['REQUEST_URI'] (или текущий url) используется в качестве URL-адреса субъекта, и поскольку это текущий url (с параметрами), который вам нужен, он просто добавит новый param (s) прямо до конца вашего URL-адреса.

Обратите внимание на esc_url_raw , функция add_query_arg не add_query_arg по умолчанию, вызывая «поздний выход», технически вы также можете использовать esc_url , но это не нужно, так как вы не видите ссылку.