La función de JavaScript wp_attempt_focus
está causando este problema. La función se activa poco después de cargar la página, borra el formulario y se enfoca en él, lo que obliga a los usuarios a ingresar manualmente su información de inicio de sesión.
Chrome completa el nombre de usuario y la contraseña automáticamente, solo milisegundos antes de que la función JS borre el campo. Chrome no recoge correctamente los cambios, mostrando campos rellenos de color amarillo aunque los campos estén realmente vacíos.
Aunque aprecio la funcionalidad de enfoque automático, no puedo pensar en una buena razón por la que alguien querría que el formulario se borre automáticamente.
La fuente
Lamentablemente, la función ha sido codificada en wp-login.php
en las líneas 913-930 (WordPress 4.0). Cambiar el archivo wp-login.php
por completo es una mala idea, ya que podría sobrescribirse en cualquier próxima actualización de WordPress. Así que tendremos que recurrir a un poco de 'piratería'.
La solución fácil
Se llama a la función wp_attempt_focus
si el formulario no tiene errores. Tenemos suerte: la comprobación de errores se realiza a través de PHP. Esto significa que simplemente podemos evitar que la función se active al simular un error de formulario en el momento adecuado mediante las acciones de WP. Elegí la acción login_form
ya que la acción siempre se activa después de el manejo de errores, justo antes de la llamada JS. Agregue el siguiente código al functions.php
de su tema (o archivo de complemento):
add_action("login_form", "kill_wp_attempt_focus");
function kill_wp_attempt_focus() {
global $error;
$error = TRUE;
}
La corrección hackish
La solución anterior evita que la función se dispare por completo, lo que significa que tampoco obtendrás el enfoque automático adecuado. Hay otra forma de evitarlo: almacenar en búfer la salida HTML y modificarla a través de ob_start
, inspirado en Geeklab . El almacenamiento en búfer nos permite eliminar partes específicas del código, en este caso, la parte de autoclear d.value = ''
. Sin embargo, no olvides vaciar el búfer.
add_action("login_form", "kill_wp_attempt_focus_start");
function kill_wp_attempt_focus_start() {
ob_start("kill_wp_attempt_focus_replace");
}
function kill_wp_attempt_focus_replace($html) {
return preg_replace("/d.value = '';/", "", $html);
}
add_action("login_footer", "kill_wp_attempt_focus_end");
function kill_wp_attempt_focus_end() {
ob_end_flush();
}