Uno de los errores que WordPress da, en apariencia de forma aleatoria, y del que me han llegado varias consultas últimamente es el ERROR: El campo contraseña está vacío que aparece en la pantalla de login. Y digo en apariencia porque en realidad hay una serie de factores que deben coincidir para que se produzca este error.
Así que, para que todo aquel a quien le pase pueda solucionarlo, vamos a ver en qué condiciones se produce, cómo conseguir acceder al panel de administración de WordPress si se produce ese error y cómo evitar que vuelva a suceder.
Tabla de contenidos
Cuándo se produce el ERROR: El campo contraseña está vacío
Decía más arriba que aparentemente aparece de forma aleatoria porque las condiciones que deben coincidir para que se produzca son varias y dependen de diversos factores, así que en principio parece que no hay una causa aparente.
En concreto, para que se produzca este error debe coincidir:
- Que estés utilizando el navegador Google Chrome
- Que hayas configurado Chrome para que recuerde el nombre de usuario y la contraseña, para no tener que introducirla manualmente
- Que, como establece la mecánica cuántica, la función de onda colapse en el estado que se produzca el error
En resumen, que las dos primeras condiciones sí o sí son necesarias para que el error se produzca, pero como habrás deducido por la tercera lo hace básicamente si le sale de las narices, según el humor con el que tu WordPress y tu Chrome se hayan levantado esa mañana.
Porque amigo, el error se produce debido a una falta de entendimiento entre Chrome y WordPress: cada uno hace las cosas a su modo, y a veces chocan al hacerlo.
Por qué se produce (la parte técnica)
Para los más curiosos, la causa es un pequeño código javascript de WordPress llamado wp_attempt_focus, que lo que hace es limpiar el formulario tras cargar la página, dejándolo limpio y poniendo en él el cursor para que tú puedas introducir la contraseña.
Sin embargo, tan pronto como el formulario ha aparecido, Chrome lo ha rellenado automáticamente con la información que tiene guardada en memoria. ¿Qué ocurre? Pues que cuando carga la página WordPress lo limpia, pero Chrome no se entera de la jugada, por lo que te sigue mostrando el campo relleno cuando en realidad el formulario está efectivamente vacío.
Chrome te está mostrando una cosa basándose en la información que él tiene, pero WordPress está captando otra muy distinta en base a lo que su código ha hecho. En resumen, la dramática secuencia de acontecimientos que da lugar a este error sería más o menos así:
- WordPress empieza a presentar la página de login, y Google Chrome la va creando en pantalla
- Tan pronto como se carga el formulario, Chrome lo reconoce y rellena la información que tiene guardada
- Cuando la página se termina de cargar WordPress ejecuta el wp_attempt_focus y limpia el campo de contraseña, que se queda vacío
- Chrome, que está en la parra, no se entera de la jugada y te sigue mostrando los puntos que indican que la contraseña está puesta
- Tú te vuelves loco y mandas a WordPress, a Chrome y al que inventó las contraseñas a freír espárragos
Y así es, maifrén, como se llenan los manicomios hospitales psiquiátricos.
¿Estás construyendo tu tienda online o eres implementador WordPress?
¿Necesitas plugins de calidad y con soporte para implementar funcionalidades concretas?
Consigue todos los plugins a la venta en la sección de plugins de esta web y todos los que siga añadiendo. Acceso a los 96 plugins (y subiendo) con soporte directo del desarrollador, actualizaciones y uso ilimitado: úsalos en tantas webs como lo necesites.
Vale, pero ¿ahora cómo entro?
Se nota que estás poco atento, o que te has saltado todo el rollo técnico para venir directamente a la parte de la solución. Que conste que no te culpo por ello. 🙂
El tema es que sabiendo cuál es el problema es fácil saber cuál es la solución: si Chrome cree que la contraseña está ahí escrita (y así nos lo muestra) cuando en realidad no es así, lo único que hay que hacer es:
- Sencillamente, escribirla: borra lo que Chrome cree que pone y escríbela tú mismo
- Obligar a Chrome a que realmente la escriba: añade a la contraseña un espacio en blanco u otro carácter cualquiera y después vuelve a borrarlo
Ya está, cualquiera de las dos soluciones es válida y te permitirá entrar. Pero claro, es un follón estar haciendo eso cada vez que a Chrome y a WordPress se les ocurra ponerse de acuerdo para tocarte las narices, así que vamos a establecer una solución más permanente.
Solucionar el ERROR: El campo contraseña está vacío para siempre
Como no queremos estar cada vez añadiendo y borrando un espacio (¿de qué serviría entonces que Chrome recuerde la contraseña?) y no es cuestión de cambiar de navegador por una cosa así, vamos a implementar una solución más técnica. O mejor dos: yo te doy alternativas y tú eliges la que más rabia te dé.
En ambas vamos a utilizar un poco de PHP (no te asustes, es cosa de copiar y pegar) así que tendrás que añadirlo a tu archivo functions.php (ése es el modo no recomendado, pero si lo haces así recuerda primero hacer copia de seguridad) o mejor aún, añadirlo a tu plugin de funciones personalizadas, como explico en este artículo.
La solución fácil pero no tan buena
Como wp_attempt_focus sólo actúa cuando un formulario está libre de errores, podemos hacerle un poco de trampa diciéndole que en realidad sí hay un error.
No pasa nada porque no es a él a quien le toca validar luego el formulario, así que como en realidad no hay errores podremos hacer login sin el consabido mensaje de ERROR: El campo contraseña está vacío. Pero como él creerá que sí, no borrará lo que Chrome ya ha rellenado.
El código es el siguiente:
function ejr_evita_wp_attempt_focus () {
global $error;
$error = TRUE;
}
add_action ('login_form', 'ejr_evita_wp_attempt_focus');
¿Por qué no tan buena? Bueno, pues porque evita que wp_attempt_focus se ejecute, con lo que nunca más pondrá el cursor en el formulario para poder empezar a rellenarlo al momento.
La solución «pro»
Creo que merece la pena gastar algo más de código y hacer las cosas bien, así que te dejo aquí el código que yo mismo utilizo cuando algún cliente de mi servicio de mantenimiento y soporte WordPress (ya sabes que este servicio lleva incluida la resolución de errores y de cualquier emergencia que se pueda presentar con la web) me dice que está teniendo este problema:
function ejr_evita_wp_attempt_focus () {
ob_start ('ejr_reemplaza_wp_attempt_focus');
}
add_action ('login_form', 'ejr_evita_wp_attempt_focus');
function ejr_reemplaza_wp_attempt_focus ($html) {
return preg_replace ("/d.value = '';/", "", $html);
}
function ejr_termina_wp_attempt_focus () {
ob_end_flush ();
}
add_action ('login_footer', 'ejr_termina_wp_attempt_focus');
Y listo, con ese código tendrás lo mejor de cada mundo: solucionarás el dichoso error del campo de contraseña vacío, y seguirás teniendo el cursor en el formulario siempre que lo necesites. 🙂
¿Que te da miedo manejarte con el código? Pues no te preocupes, te lo he empaquetado en un plugin gratuito para que simplemente tengas que descargarlo e instalarlo. Lo tienes aquí. 🙂
Y, como siempre, para cualquier duda o pregunta que tengas, estoy a tu disposición tanto en los comentarios como (si quieres algo más privado) a través del formulario de contacto.
FREDY GOMEZ dice
Maestro más de 5 horas y ud me salvó. Mil gracias!
Enrique J. Ros dice
Me alegra que te haya sido útil, Fredy 🙂
Mireya dice
buenas noches, por favor en que parte debria ir el codigo de contraseña vacia, he pusto en varios lugares y no me funciona
Enrique J. Ros dice
Hola Mireya
Echa un vistazo a esto, te será de ayuda.
Un saludo,