Login redirecionar para a página anterior

8

Eu tenho uma página de login personalizada em enlace

Quando você preenche o nome de usuário e a senha, ele redireciona você para a página anterior em que você estava perfeitamente. Quando você clica em Logout, ele redireciona você para a mesma página. Então tudo isso funciona bem.

Se você deixar o nome de usuário / senha em branco ou tiver um erro, você será redirecionado para wp-login. Para evitar isso, usei o código de enlace

add_action('login_redirect', 'redirect_login', 10, 3);
function redirect_login($redirect_to, $url, $user) {
if($user->errors['empty_password']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else if($user->errors['empty_username']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else if($user->errors['invalid_username']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else if($user->errors['incorrect_password']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else{
    wp_redirect(get_bloginfo('url').'/log-in');
}
exit;
}

Isso funciona muito bem para erros de login no meu site. Mas agora o redirecionamento de login leva você para enlace (o usuário 'Teste' é levado para a página de perfil do membro do BuddyPress).

Como eu redireciono o usuário para a página anterior quando eles fazem login?

    
por Tanya 03.10.2012 / 07:23

1 resposta

7

Você pode filtrar a função login_redirect desse modo, adaptar de acordo com suas necessidades.

add_filter('login_redirect', 'redirect_previous_page', 10, 1);

function redirect_previous_page( $redirect_to ){
    global $user;

    $request = $_SERVER["HTTP_REFERER"];

    if ( in_array( $user->roles[0], array( 'administrator') ) ) {

        return admin_url();

    } elseif ( in_array( $user->roles[0], array( 'subscriber') ) ) {

        return $request;
    } 

    return $redirect_to;
}

Atualização 1:

O código (acima) foi modificado acima e testado - funciona.

Atualização 2: (por Tanya)

Conversamos com @userabuser e criamos essa resposta que funciona.

// Redirect to previous page 
remove_all_filters('login_redirect', 99);
add_filter('bbp_user_login_redirect_to', 'function_name');

Nota importante:

Acontece que Tanya estava usando o plugin do fórum bbPress, portanto, apesar do snippet original que usa,

add_filter('login_redirect', 'function_name'); //the standard WordPress API filter

que está correto e funciona sob condições "normais" do WordPress, foi, neste caso, sobrescrito em prioridade pelo filtro bbPress,

add_filter('bbp_user_login_redirect_to', 'function_name'); //the bbPress API filter

Agora, como a documentação no site bbPress.org , que detalha essas ações e ganchos, é mal organizada e incompleta (até onde eu sei), sugiro que (qualquer um) busque mais informações sobre quais são os pontos em que e o que filtra o que deve dar uma olhada em este recurso aqui que fornece uma lista detalhada de ganchos e filtros.

Notas: (diversas)

Altere 'subscriber' para corresponder à função que você está usando para esse tipo de usuário. Ele também pode aceitar várias funções, desde que esteja na forma de uma matriz.

in_array( $user->roles[0], array( 'subscriber', 'role2, role3', 'etc')
    
por userabuser 04.10.2012 / 08:54