Wie kann ich Benutzer nach Eingabe eines falschen Passworts umleiten?
6 Antworten
- Stimmen
-
- 2011-04-26
wp_login_form()
erstelltein Formularmit dem Aktionsattributsite_url/wp-login.php
. Wenn Sie also auf die Schaltfläche "Senden" klicken,wird das Formular veröffentlichtsite_url/wp-login.php
ignoriert redirect_tobei Fehlern (wiefalsches Passwort). Verwenden Siein Ihrem Fallentweder wiederein Plugin odererstellen Sie dengesamten Anmeldevorgangneu. Auf diese Weise haben Sie die Kontrolle über FehlerSchauen Sie sich an. Überprüfen Sie,ob der Benutzernameim benutzerdefinierten Anmeldeformularwaseine sehr ähnliche Frageist. 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
Ichbin von Google hierhergekommen.Aber die Antwort hatmichnichtbefriedigt.Ich habeeine Weilegesucht undeine bessere Lösunggefunden.
Fügen Sie dies Ihrer functions.php hinzu:
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; } }
-
Danke Alexey,ich werde dastesten (daichnochein Pluginbenutze)Thanks Alexey, I will test this (as I'm still using a plugin)
- 0
- 2012-06-19
- Steven
-
Die Lösung von Alexeyfunktioniert,wennfalsche Anmeldeinformationeneingegeben werden,schlägtjedoch leiderfehl,wenn der Benutzer die Eingabe von Benutzername oder Kennwort vergisst.Anscheinend versucht Wordpressin diesem Fallnichteinmal,den Benutzer anzumelden,sodass die Aktion wp_login_failednicht ausgeführt wird.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
-
Ich würde wp_get_referer () hier verwenden,um Zeit zu sparen: 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
-
Außerdem verwenden Sie hier definitiv add_query_arg,daher sollte wp_redirect lauten: "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
Eine Lösungfür Szczepan Hołyszewskis Punkt über leere Felderin der akzeptierten Lösung. DiefolgendejQuery verhindert,dass zur Standard-wp-Anmeldeseitegewechselt wird: (zur Anmeldeseitenvorlage oder zur Fußzeile hinzufügen.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
Eine Ergänzung zu Alexeys Antwort.Sie könneneine Abfragefunktion hinzufügen,um zu überprüfen,obeines der Feldernicht leerist.Auf diese Weise wird das Formularnurgesendet,wennetwas überprüft werdenmuss,wodurch verhindert wird,dass WordPress zu/wp-login.php umleitet.
<script> $("#wp-submit").click(function() { var user = $("input#user_login").val(); if (user == "") { $("input#user_login").focus(); return false; } }); </script>
Ichbin mirimmernochnicht sicher,wieich den Aspekt des vergessenen Passwortsbeheben soll.
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
-
Bittebeachten Sie,dass WordPressjQueryim "No Conflict" -Modus lädt.Der Alias `$`funktioniertnicht.Please be aware that WordPress loads jQuery in "No Conflict" mode. The `$` alias does not work.
- 3
- 2013-02-26
- s_ha_dum
-
Siemüssen auchberücksichtigen,dass der Benutzer die [Eingabetaste] drückt undnicht auf die Anmeldeschaltfläche klickt.Außerdemmüssen Sie auchnacheinem leeren Passwort suchen.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
Folgendes hatbei mirfunktioniert. Diesebeiden Hooksbefinden sichin der Funktion
wp_authenticate
inwp-includes/puggabel.php
.- Überprüfen Sie über den Filter
authenticate
,obim Anmeldeformular der Benutzername oder das Kennwortfehlt.
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);
- Überprüfen Sie über die Aktion
wp_login_failed
,ob die Authentifizierung des angegebenen Benutzernamens und Kennwortsfehlgeschlagenist.
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; });
-
Bitte ** [bearbeiten] Sie Ihre Antwort ** undfügen Sieeine Erklärung hinzu: ** Warum ** könnte das das Problem lösen?Please **[edit] your answer**, and add an explanation: **why** could that solve the problem?
- 0
- 2018-05-11
- fuxia
Ich verwende
wp_login_form()
,um das Anmeldeformularin einemjQuery-Dialogfenster anzuzeigen.Wenn der Benutzerein falsches Passworteingibt,wirder zum Backend weitergeleitet.Das willichnichtGibteseine Möglichkeit,den Benutzer darüber zuinformieren,dasserein falsches Passworteingegeben hat undtrotzdem auf derselben Seitebleibt?
Bevor
wp_login_form()
kam,habeichein Plugin verwendet.Ich hoffe,dassiches vermeiden kann,dafürein Plugin zu verwenden.Mein Code: