Connexion rediriger vers la page précédente


8

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

Lorsque vous remplissez le nom d'utilisateur et le mot de passe, il vous redirige parfaitement vers la page précédente sur laquelle vous étiez. Lorsque vous cliquez sur Déconnexion, il vous redirige vers la même page. Tout cela fonctionne donc 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 /programming/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 'Testing' est pris pour la page de profil de leur membre BuddyPress).

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


Ma réponse publiée précédemment a mal lu votre question, je l'ai donc supprimée. Avez-vous déjà essayé de lier l' action wp_login ? C'est l'un des derniers licenciés lorsque vous vous connectez avec succès. Je l'ai utilisé sur un site que j'ai récemment construit avec BuddyPress et cela a fonctionné comme un charme.
Eric Allen

Salut @allenericr, pour être honnête, je ne saurais pas par où commencer. Ma connaissance de php / fonctions / etc est très limitée. Seriez-vous en mesure de publier ce que vous utilisez pour ce site si vous trouvez que c'est une meilleure alternative?
Tanya

Réponses:


8

Vous pouvez filtrer la login_redirectfonction ainsi, l'adapter en fonction de 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é ci-dessus et testé - cela fonctionne.

Mise à jour 2: (par Tanya)

Discuté avec @userabuser et est venu avec 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 de forum bbPress, donc malgré l'extrait d'origine qui utilise,

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

qui est correct et fonctionne dans des conditions WordPress "normales" , é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, comme la documentation sur le site bbPress.org qui détaille ces actions et ces hooks est mal organisée et quelque peu incomplète (pour autant que je sache), je suggère que (n'importe qui) cherche plus d'informations sur quels hooks où et quels filtres quoi devrait prendre regardez cette ressource ici qui fournit une liste détaillée des crochets et des filtres.

Notes: (divers)

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

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

@Tanya Code modifié pour inclure les paramètres facultatifs. $ user n'est peut-être pas accessible. Essayez cette mise à jour et faites-le moi savoir.
Adam

@Tanya Salut Tanya, merci pour la mise à jour. En attendant, pouvez-vous s'il vous plaît supprimer vos derniers commentaires (cliquez sur le petit x au survol) afin que nous puissions nettoyer le fil de commentaires. Je supprimerai également mes commentaires non pertinents.
Adam
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.