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, obligando a los usuarios a ingresar manualmente su información de inicio de sesión.
Chrome está completando 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 a pesar de que 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 quiera que el formulario se borre automáticamente.
La fuente
Lamentablemente, la función se ha codificado wp-login.php
en las líneas 913-930 (WordPress 4.0). Cambiar el wp-login.php
archivo por completo es una mala idea, ya que podría sobrescribirse en cualquier próxima actualización de WordPress. Entonces tendremos que recurrir a un poco de 'pirateo'.
La solución fácil
Se wp_attempt_focus
llama a la función si el formulario no tiene errores. Estamos de 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 falsificando un error de formulario en el momento adecuado mediante acciones de WP. Elegí la login_form
acción ya que la acción siempre se dispara después del manejo de errores, justo antes de la llamada JS. Agregue el siguiente código a su tema functions.php
(o archivo de complemento):
add_action("login_form", "kill_wp_attempt_focus");
function kill_wp_attempt_focus() {
global $error;
$error = TRUE;
}
La solución hack
La solución anterior evita que la función se active por completo, lo que significa que tampoco obtendrá el enfoque automático adecuado. Hay otra forma ob_start
de evitarlo : almacenando en búfer la salida HTML y modificándola a través de , inspirada en Geeklab . El almacenamiento en búfer nos permite eliminar porciones específicas de código, en este caso, la parte 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();
}