Comment puis-je rediriger l'utilisateur après avoir entré un mot de passe incorrect?
6 réponses
- votes
-
- 2011-04-26
wp_login_form()
crée unformulaire avec un attribut d'actionsite_url/wp-login.php
,ce qui signifie que lorsque vous cliquez sur lebouton d'envoi,leformulaireestpublié sursite_url/wp-login.php
quiignore redirect_to sur leserreurs (comme unmauvaismot depasse) donc dans votre cas,revenez à l'utilisation d'unplugin ou recréeztout leprocessus de connexionet de cettefaçon vous aurez le contrôle sur leserreurs,jetez un œil à Vérifiez lenom d'utilisateur correct sur leformulaire de connexionpersonnalisé quiest une questiontrès similaire.wp_login_form()
creates a form with an action attribute ofsite_url/wp-login.php
, which means that when you click the submit button the form is posted tosite_url/wp-login.php
which ignores redirect_to on errors (like wrong password) so in your case either go back to using a plugin or recreate the whole login process and that way you will have control on errors, take a look at Check for correct username on custom login form which is very similar question. -
- 2012-06-08
Je suis venuici de Google.Mais la réponsene m'apas satisfait.Je cherchais depuis unmomentet j'aitrouvé unemeilleure solution.
Ajoutez ceci à votre functions.php :
add_action( 'wp_login_failed', 'my_front_end_login_fail' ); // hook failed login function my_front_end_login_fail( $username ) { $referrer = $_SERVER['HTTP_REFERER']; // where did the post submission come from? // if there's a valid referrer, and it's not the default log-in screen if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') ) { wp_redirect( $referrer . '?login=failed' ); // let's append some information (login=failed) to the URL for the theme to use exit; } }
I came here from google. But the answer didn't satisfy me. I was looking for a while and found a better solution.
Add this to your functions.php:
add_action( 'wp_login_failed', 'my_front_end_login_fail' ); // hook failed login function my_front_end_login_fail( $username ) { $referrer = $_SERVER['HTTP_REFERER']; // where did the post submission come from? // if there's a valid referrer, and it's not the default log-in screen if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') ) { wp_redirect( $referrer . '?login=failed' ); // let's append some information (login=failed) to the URL for the theme to use exit; } }
-
Merci Alexey,je vaistester ceci (carj'utilisetoujours unplugin)Thanks Alexey, I will test this (as I'm still using a plugin)
- 0
- 2012-06-19
- Steven
-
La solution d'Alexeyfonctionne lorsque demauvaisesinformations d'identification sont saisies,mais échouemalheureusement lorsque l'utilisateur oublie d'entrer lenom d'utilisateur ou lemot depasse.Apparemment,Wordpressn'essayemêmepas de connecter l'utilisateur dans ce cas,donc l'action wp_login_failedn'estpaseffectuée.Alexey's solution works when wrong credentials are entered, but unfortunately fails when the user forgets to enter username or password. Apparently Wordpress doesn't even try to log the user in in this case, so wp_login_failed action is not performed.
- 9
- 2012-09-12
- Szczepan Hołyszewski
-
J'utiliserais wp_get_referer ()icipourgagner dutemps: http://codex.wordpress.org/Function_Reference/wp_get_refererI would use wp_get_referer() here to save some time: http://codex.wordpress.org/Function_Reference/wp_get_referer
- 1
- 2013-07-03
- Jake
-
Deplus,vous utilisez définitivement add_query_argici,donc le wp_redirect devrait être: "wp_redirect (add_query_arg ('login','failed',$ referrer));"Also, you definitely use add_query_arg here, so the wp_redirect should be: "wp_redirect( add_query_arg('login', 'failed', $referrer) );"
- 2
- 2013-07-03
- Jake
-
- 2013-05-09
Une solutionpour lepoint de Szczepan Hołyszewski sur les champs vides dans la solution acceptée,lejQuery suivantempêchera d'aller à lapage standard wp-login: (ajouter aumodèle depage de connexion oufooter.php)
jQuery("#loginform-custom").submit(function(){ var isFormValid = true; jQuery("input").each(function() { if (jQuery.trim($(this).val()).length == 0){ jQuery(this).addClass("submit_error"); isFormValid = false; } else { jQuery(this).removeClass("submit_error"); } }); return isFormValid; });
A solution for Szczepan Hołyszewski's point about empty fields in the accepted solution, the following jQuery will prevent going to the standard wp-login page: (add to login page template or footer.php)
jQuery("#loginform-custom").submit(function(){ var isFormValid = true; jQuery("input").each(function() { if (jQuery.trim($(this).val()).length == 0){ jQuery(this).addClass("submit_error"); isFormValid = false; } else { jQuery(this).removeClass("submit_error"); } }); return isFormValid; });
-
- 2013-02-26
Un ajout à la réponse d'Alexey.Vouspouvez ajouter unefonctionjquerypour vérifier que l'un des champsn'estpas vide.De cettefaçon,leformulairene serapas soumis àmoins qu'il y ait quelque chose à vérifier,empêchant WordPress de rediriger vers/wp-login.php.
<script> $("#wp-submit").click(function() { var user = $("input#user_login").val(); if (user == "") { $("input#user_login").focus(); return false; } }); </script>
Vousne saveztoujourspas comment résoudre l'aspect dumot depasse oublié
One addition to Alexey's answer. You can add a jquery function to check that one of the fields is not blank. That way the form will not submit unless there is something to check, preventing WordPress from redirecting to /wp-login.php.
<script> $("#wp-submit").click(function() { var user = $("input#user_login").val(); if (user == "") { $("input#user_login").focus(); return false; } }); </script>
Still not sure how to fix the forgot password aspect
-
Veuilleznoter que WordPress chargejQueryen mode "No Conflict".L'alias «$»ne fonctionnepas.Please be aware that WordPress loads jQuery in "No Conflict" mode. The `$` alias does not work.
- 3
- 2013-02-26
- s_ha_dum
-
Vous devez également considérer que l'utilisateurfrappe [entrée]et ne cliquepas sur lebouton de connexion.En outre,vous devez également vérifier lemot depasse vide.You also have to consider that user hits [enter] and not clicking t he login button. Also, you need to check for blank password as well.
- 0
- 2013-02-26
- Steven
-
- 2020-08-30
Ce qui suit afonctionnépourmoi. Ces deux crochets setrouvent dans lafonction
wp_authenticate
danswp-includes/puggabel.php
.- Vérifiez via lefiltre
authenticate
si leformulaire de connexionne contientpas lenom d'utilisateur ou lemot depasse.
function wpse_15633_redirectMissingDataLoginForm($user, $username, $password) { $errors = []; empty(trim($password)) && $errors[] = 'password_empty'; empty(trim($username)) && $errors[] = 'username_empty'; if (! empty($errors)) { $redirect_url = add_query_arg([ 'errors' => join(',', $errors), ], site_url('login', 'login_post')); if (wp_safe_redirect($redirect_url)) { exit; } } return $user; } add_filter('authenticate', 'wpse_15633_redirectMissingDataLoginForm', 10, 3);
- Vérifiez via l'action
wp_login_failed
si l'authentification dunom d'utilisateuret dumot depassefournis a échoué.
function wpse_15633_redirectFailedLoginForm($username, $error) { $redirect_url = add_query_arg([ 'errors' => $error->get_error_code(), ], site_url('login', 'login_post')); if (wp_safe_redirect($redirect_url)) { exit; } } add_action('wp_login_failed', 'wpse_15633_redirectFailedLoginForm', 10, 2);
The following worked for me. Both of these hooks can be found within the function
wp_authenticate
withinwp-includes/puggabel.php
.- Check via the
authenticate
filter if the login form is missing the username or password.
function wpse_15633_redirectMissingDataLoginForm($user, $username, $password) { $errors = []; empty(trim($password)) && $errors[] = 'password_empty'; empty(trim($username)) && $errors[] = 'username_empty'; if (! empty($errors)) { $redirect_url = add_query_arg([ 'errors' => join(',', $errors), ], site_url('login', 'login_post')); if (wp_safe_redirect($redirect_url)) { exit; } } return $user; } add_filter('authenticate', 'wpse_15633_redirectMissingDataLoginForm', 10, 3);
- Check via the
wp_login_failed
action if the authentication of the supplied username and password has failed.
function wpse_15633_redirectFailedLoginForm($username, $error) { $redirect_url = add_query_arg([ 'errors' => $error->get_error_code(), ], site_url('login', 'login_post')); if (wp_safe_redirect($redirect_url)) { exit; } } add_action('wp_login_failed', 'wpse_15633_redirectFailedLoginForm', 10, 2);
-
- 2018-05-11
jQuery("#loginform-custom").submit(function(){ var isFormValid = true; jQuery("input").each(function() { if (jQuery.trim($(this).val()).length == 0){ jQuery(this).addClass("submit_error"); isFormValid = false; } else { jQuery(this).removeClass("submit_error"); } }); return isFormValid; });
jQuery("#loginform-custom").submit(function(){ var isFormValid = true; jQuery("input").each(function() { if (jQuery.trim($(this).val()).length == 0){ jQuery(this).addClass("submit_error"); isFormValid = false; } else { jQuery(this).removeClass("submit_error"); } }); return isFormValid; });
-
Veuillez ** [modifier] votre réponse **,et ajouter uneexplication: **pourquoi ** celapourrait-il résoudre leproblème?Please **[edit] your answer**, and add an explanation: **why** could that solve the problem?
- 0
- 2018-05-11
- fuxia
J'utilise
wp_login_form()
pour afficher leformulaire de connexion dans unefenêtre de dialoguejQuery.Si l'utilisateur saisit unmot depasseerroné,l'utilisateurest redirigé vers lebackend.Jene veuxpas de ça.Existe-t-il unmoyen d'avertir l'utilisateur qu'il aentré unmot depasseincorrectet qu'il restetoujours sur lamêmepage?
Avant l'arrivée de
wp_login_form()
,j'utilisais unplugin.J'espèrepouvoir éviter d'utiliser unpluginpour cela.Mon code: