Evitar que wp_login_form() redirija a wp-admin cuando hay errores

9 ago 2012, 02:51:09
Vistas: 21.6K
Votos: 9

He creado un formulario de inicio de sesión en el frontend de mi sitio usando wp_login_form(). Sin embargo, cuando el usuario ingresa un nombre de usuario/contraseña incorrectos, es redirigido al formulario de inicio de sesión de wp-admin.

¿Cómo se pueden mostrar los mensajes de error sobre el formulario de inicio de sesión? Idealmente, no quiero que el usuario tenga que ver nunca la sección de administración de WordPress.

He intentado usar el hook redirect_invalid_login() pero parece que no funciona.

2
Todas las respuestas a la pregunta 2
3
17

simplemente agrega el siguiente código a tu archivo functions.php. redirigirá al usuario de vuelta desde donde se envió el formulario de inicio de sesión.

add_action( 'wp_login_failed', 'my_front_end_login_fail' );  // enlace para inicio de sesión fallido

function my_front_end_login_fail( $username ) {
   $referrer = $_SERVER['HTTP_REFERER'];  // ¿de dónde vino el envío del formulario?
   // si hay un referente válido, y no es la pantalla de inicio de sesión predeterminada
   if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') ) {
      wp_redirect( $referrer . '?login=failed' );  // agreguemos información (login=failed) a la URL para que el tema lo use
      exit;
   }
}
5 feb 2013 07:48:08
Comentarios

¿cómo podemos obtener errores como contraseña inválida o nombre de usuario inválido, etc...???

vrajesh vrajesh
26 jun 2015 09:29:16

La mejor práctica es no mostrar un error específico sino algo como "credenciales inválidas". Mostrar "contraseña inválida" significa que el usuario existe en este sitio, lo cual es una cosa menos que adivinar (y por sí mismo, saber que un correo está registrado en algún sitio web puede ser un problema de privacidad). Si muestras "contraseña inválida", entonces significa que algún usuario en este sitio usa esa contraseña, lo cual no es ideal. Y para obtener la información de que hubo un error, puedes verificar si $_GET['login'] == 'failed'.

idFlood idFlood
30 nov 2018 18:05:33

No soy fan de function.php/theme.php pero esto funcionó. Tal vez quiero agregar un fragmento de php a mi archivo de plantilla de encabezado en elementor pero nadie hace eso.

powdered_bread powdered_bread
14 sept 2023 03:09:40
0
-1

sabes que eso lo arregla pero aún se estropea cuando no introduces ninguna información.

Realmente no me gusta usar functions.php.

Me gustaría que fuera como index.php, pero cosas así no han sido posibles por alguna razón. Necesitamos una mejor solución.

El formulario de inicio de sesión de "Essentials Addons" para Elementor parece resolver todos los problemas si estás usando Elementor. Es lo único que he encontrado que realmente hace el trabajo. Menos mal que es gratis.

14 sept 2023 22:20:58