2013-12-03 4 views
6

Я работаю над веб-сайтом с WordPress 3.7.1 и пытаюсь перенаправить пользователя при входе через параметр redirect_to URL.WordPress Войти redirect_to not working

Я проверил, что бэкенд формы входа в систему видит параметр redirect_to GET и что вход в систему регистрации включает значение redirect_to POST ... но это не работает.

Удалены ссылка и пользовательские учетные данные

После входа в систему (как для моего администратора учетный и Абонента учетный предоставленной в этой должности), пользователь переходит на WP приборной панели вместо URL в параметре redirect_to.

У меня есть set allowed_redirect_hosts со следующим кодом в пользовательском файле плагина (что почти так же).

add_filter('allowed_redirect_hosts' , 'glue_allowed_redirect_hosts' , 10); 
function glue_allowed_redirect_hosts($content){ 
    $content[] = 'app.realestategradschool.com'; 
    $content[] = 'dev-app.realestategradschool.com'; 
    $content[] = 'app.realestategradschool.local'; 
    return $content; 
} 

Я отключил все другие плагины, пытаясь устранить эту проблему.

Редактировать: я не могу использовать login_redirect, поскольку я не хочу перенаправлять все логины ... только если посетитель отправляется на страницу входа с другого сайта (используя oAuth для входа в систему ... oAuth работает ... только не редирект)

Edit: Рабочий раствор:

function glue_login_redirect($redirect_to,$request='',$user=null){ 
    //using $_REQUEST because when the login form is submitted the value is in the POST 
    if(isset($_REQUEST['redirect_to'])){ 
     $redirect_to = $_REQUEST['redirect_to']; 
    } 
    return $redirect_to; 
} 
add_filter('login_redirect','glue_login_redirect',999); 
+0

Другая вещь, которую я в этом плагине файл является декларацией wp_validate_redirect, где я скопировал код с WordPress CORE и просто добавили один оператор отладки. Моя проблема остается прежней или нет, этот код остается нетронутым. –

+0

Почему бы не использовать 'login_redirect', вы его уже использовали? –

ответ

7

Вы можете использовать login_redirect фильтр. См. Здесь http://codex.wordpress.org/Plugin_API/Filter_Reference/login_redirect

Я думаю, что это то, что вы ищете.

Обычно это перенаправляет все логины. Чтобы иметь возможность перенаправлять только тогда, когда вы хотите, вы можете использовать параметр строки запроса в URL-адресе. Проверьте параметр, если он существует.

+0

Это решение заставляет все логины перенаправляться ... Мне нужны только некоторые из них. Я отредактировал мой оригинальный вопрос с этой информацией. –

+0

Итак, вы можете уловить параметр строки запроса в методе 'login_redirect' и перенаправлять только в том случае, если этот параметр соответствует вашему условию. Например, в текущем сценарии вы получаете параметр redirect_to. Вы можете получить это и проверить, равна ли оно некоторому значению, а затем перенаправить его. – Bilal

+1

Этот подход оказался рабочим. Я опубликовал свой рабочий код в исходном вопросе (поскольку он поддерживает форматирование). Я вручу награду, как только мне позволено. –

1

Попробуйте добавить это в файл functions.php шаблона:

add_action('login_form' , 'glue_login_redirect'); 
function glue_login_redirect() { 
    global $redirect_to; 
    if (!isset($_GET['redirect_to'])) { 
     $redirect_to = 'YOURURLHERE'; 
    } 
    else{ 
     $redirect_to = $_GET['redirect_to']; 
    } 
} 
+0

Это решение заставляет все логины перенаправляться ... Мне нужны только некоторые из них. Я отредактировал мой оригинальный вопрос с этой информацией. –

+0

Почему вы не фильтруете внутри функции: ЕСЛИ посетитель отправляется на страницу входа с другого сайта с помощью oAuth THEN перенаправляет в соответствии с разрешенным_redirect_hosts – RafaSashi

0

Возможно, этот код поможет вам.

<input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>" /> 

Его перенаправление пользователей туда, где вы можете войти. пример. если вы авторизуетесь с домашней страницы или сообщения. Его логин затем перенаправляет обратно на главную страницу или страницу входа.

Этот код Основная часть:

<?php echo $_SERVER['REQUEST_URI']; ?>