web-dev-qa-db-fra.com

Login redirection vers la page précédente

J'ai une page de connexion personnalisée à http://netballscoop.com/log-in/

Lorsque vous remplissez le nom d'utilisateur et le mot de passe, vous êtes parfaitement redirigé vers la page précédente. Lorsque vous cliquez sur Déconnexion, vous êtes redirigé vers la même page. Donc tout cela fonctionne bien.

Si vous laissez le nom d'utilisateur/mot de passe vide ou avez une erreur, cela vous mènera à wp-login. Pour éviter cela, j'ai utilisé le code de https://stackoverflow.com/questions/11477107/redirect-away-from-login-page

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;
}

Cela fonctionne très bien pour les erreurs de connexion sur mon site Web. Mais maintenant, la redirection de connexion vous amène à http://netballscoop.com/members/testing (l'utilisateur 'Test' est pris pour la page de profil de son membre BuddyPress).

Comment rediriger l'utilisateur vers la page précédente lorsqu'il se connecte?

8
Tanya

Vous pouvez filtrer la fonction login_redirect comme suit, adaptez-la à vos besoins.

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;
}

Mise à jour 1:

Le code (ci-dessus) a été modifié et testé ci-dessus - cela fonctionne.

Mise à jour 2: (par Tanya)

J'ai discuté avec @userabuser et j'ai trouvé cette réponse qui fonctionne.

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

Note importante:

Il s’avère que Tanya utilisait le plugin forum bbPress, donc malgré le fragment original qui utilise,

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

ce qui est correct et fonctionne dans "normal" les conditions WordPress, était, dans ce cas, écrasé en priorité par le filtre bbPress,

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

Maintenant, étant donné que la documentation sur le site bbPress.org qui détaille ces actions et crochets est mal organisée et quelque peu incomplète (pour autant que je sache), je suggère à quiconque () de rechercher des informations supplémentaires sur quoi hooks où et quels filtres what , devrait consulter cette ressource ici qui fournit une liste détaillée des hooks et des filtres.

Notes: (divers)

Modifiez 'subscriber' pour qu'il corresponde au rôle que vous utilisez pour ce type d'utilisateur. Il peut également accepter plusieurs rôles puisqu'il se présente sous la forme d'un tableau.

in_array( $user->roles[0], array( 'subscriber', 'role2, role3', 'etc')
7
userabuser