Evitar que wp_login_form() redirija a wp-admin cuando hay errores
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.
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;
}
}
¿cómo podemos obtener errores como contraseña inválida o nombre de usuario inválido, etc...???
vrajesh
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
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.