Redirecionar usuário para URL original após o login?

Eu tenho uma function que redireciona os usuários para a página de login (casa) se eles estão tentando acessar qualquer outra página sem estar logado, eis como funciona:

function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ wp_redirect( get_option('home') ); } } add_action( 'wp', 'restrict_access_if_logged_out', 3 ); 

Realmente simples e funciona bem, o problema é que eu preciso redirecioná-los para o URL que eles estavam tentando acessar depois de logar com sucesso, exatamente como os trabalhos do backend do WordPress.

Existe uma maneira de fazer isso? Desde já, obrigado!

Solutions Collecting From Web of "Redirecionar usuário para URL original após o login?"

Você pode fazer isso facilmente. Você só precisa especificar um parâmetro de redirecionamento. Se você estiver usando um link de login na página inicial para acessar a página de login, a solução do @ sisir está correta.

< ?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] ); ?>

Se você estiver usando um formulário personalizado na primeira página, então dentro do

, certifique-se de preencher um campo oculto com o URL para redirect

 " /> 

E se você estiver usando wp_login_form() para gerar o formulário, preencha um parâmetro – http://codex.wordpress.org/Function_Reference/wp_login_form

 < ?php $args = array( 'echo' => true, 'redirect' => site_url( $_SERVER['REQUEST_URI'] ), 'form_id' => 'loginform', 'label_username' => __( 'Username' ), 'label_password' => __( 'Password' ), 'label_remember' => __( 'Remember Me' ), 'label_log_in' => __( 'Log In' ), 'id_username' => 'user_login', 'id_password' => 'user_pass', 'id_remember' => 'rememberme', 'id_submit' => 'wp-submit', 'remember' => true, 'value_username' => NULL, 'value_remember' => false ); wp_login_form( $args ); ?> 

Altere outros parâmetros de acordo com o que você precisa ou precisa.

Tente passar the_permalink() como o argumento $redirect :

 function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ wp_redirect( the_permalink() ); } } add_action( 'wp', 'restrict_access_if_logged_out', 3 ); 

EDITAR:

Desculpe, mal entendido sua pergunta originalmente. Tente isso:

 function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ $redirect = home_url() . '/wp-login.php?redirect_to=' . urlencode( $_SERVER['REQUEST_URI'] ); wp_redirect( $redirect ); exit; } } add_action( 'wp', 'restrict_access_if_logged_out', 3 ); 

Observe também: o uso adequado de wp_redirect() geralmente requer adicionar exit; , que adicionei ao meu segundo exemplo.

Obrigado a todos, eu usei um pouco do que todos recomendaram, então, no final, meu código parece assim:

 function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ wp_redirect( get_option('home') . '?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]) ); } } add_action( 'wp', 'restrict_access_if_logged_out', 3 ); 

E no meu formulário de login (eu estou codificando meu formulário de login na minha aplicação, agradeço a @Ashfame por me informar sobre o wp_login_form, eu não tinha idéia de que existia). Eu adicionei isso quando as credenciais do usuário estão bem e estão prontas para fazer o login:

 if (isset($_REQUEST['redirect_to'])){ wp_redirect($_REQUEST['redirect_to']); // wp_redirect() does not exit automatically, and should almost always be followed by a call to exit; exit; } else { wp_redirect(get_bloginfo('url') . '/groups/'); exit; } 

Muito obrigado pela sua ajuda, votei para todos!

Este é o meu código que eu uso as pessoas para direcionar para a página de login wp. Então, quando conectado, eles voltaram para onde estavam. Mas não é página inicial, mas a página de login do wordpress, onde eu configurei login personalizado.

 < ?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]) ?> 

Você pode querer pesquisar. Normalmente, você receberá o URL atual de um usuário por $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]

O gancho de filtro login_redirect é uma solução mais completa e efetiva aqui. Desta forma, você pode oferecer diferentes caminhos de redirecionamento para diferentes níveis de usuários ou manter o URL de redirecionamento no caso de um erro ao efetuar o login (ou seja, senha incorreta).

 function login_redirect( $redirect_to, $request, $user ){ if(isset($_REQUEST['redirect_to'])){ return $_REQUEST['redirect_to']; } return admin_url(); } add_filter( 'login_redirect', 'login_redirect', 10, 3 ); function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ $redirect = home_url() . '?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]); wp_redirect( $redirect ); } } add_action( 'wp', 'restrict_access_if_logged_out', 3 ); 

Não funcionou com nenhuma das suas respostas, mas apenas adicionando uma pequena coisa, funcionou! Aqui meu código:

 function login_redirect( $redirect_to, $request, $user ){ if(isset($_REQUEST['redirect_to'])){ return $_REQUEST['redirect_to']; } return admin_url(); } add_filter( 'login_redirect', 'login_redirect', 10, 3 ); function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ $redirect = home_url() . '/wp-login.php?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . urlencode($_SERVER["REQUEST_URI"])); wp_redirect( $redirect ); exit; } } add_action( 'wp', 'restrict_access_if_logged_out', 3 ); 

Só adicionei /wp-login.php em comparação com a resposta de @ Matt, mas para mim foi a chave. Espero que ajude! 🙂

**EDITAR:

Detetei um ERROR quando você for FORCE wordpress para navegar no HTTPS. Esse método não funciona porque o redirecionamento está em HTTP. Para corrigir o problema, mudei a function. Este é o resultado:

 function restrict_access_if_logged_out(){ global $wp; $protocol='http'; if (isset($_SERVER['HTTPS'])) if (strtoupper($_SERVER['HTTPS'])=='ON') $protocol='https'; if (!is_user_logged_in() && !is_home() && ($wp->query_vars['pagename'] != 'downloads') ){ $redirect = home_url() . "/wp-login.php?redirect_to= $protocol://" . $_SERVER["HTTP_HOST"] . urlencode($_SERVER["REQUEST_URI"]); wp_redirect( $redirect ); exit; } } add_action( 'wp', 'restrict_access_if_logged_out', 3 ); 

Eu verifico o protocolo e então esc_urlesc_url ‘ e adicionei o protocolo correto: $protocol:// . Também mudei o "" .

Estou com base nesta página .

Eu sei que isso é super tarde, mas fiz uma publicação sobre exatamente como fazer isso se qualquer pessoa do futuro achar isso e precisar disso:

http://www.ryanprejean.com/force-login-with-redirect-and-exceptions/