A função JavaScript wp_attempt_focus
está causando esse problema. A função dispara logo após o carregamento da página, limpa o formulário e se concentra nele, forçando os usuários a inserir manualmente suas informações de login.
O Chrome está preenchendo o nome de usuário e a senha automaticamente, apenas em milissegundos, antes que a função JS limpe o campo. O Chrome não seleciona corretamente as alterações, exibindo campos preenchidos com cores amarelas, mesmo que os campos estejam realmente vazios.
Embora eu aprecie a funcionalidade de autofoco, não consigo pensar em uma boa razão para que alguém queira que o formulário seja automaticamente eliminado.
A fonte
Infelizmente, a função foi codificada em wp-login.php
nas linhas 913-930 (WordPress 4.0). Alterar o arquivo wp-login.php
é uma má ideia, já que ele pode ser substituído em qualquer atualização do WordPress. Então, vamos ter que recorrer a um pouco de 'hacking'.
A solução fácil
A função wp_attempt_focus
é chamada se o formulário não tiver erros. Estamos com sorte - a verificação de erros é feita via PHP. Isso significa que podemos simplesmente impedir que a função seja acionada falsificando um erro de formulário no momento certo usando as ações do WP. Eu escolhi a ação login_form
, pois a ação sempre dispara o após tratamento de erros, logo antes da chamada JS. Adicione o seguinte código ao functions.php
(ou arquivo de plug-in) do seu tema:
add_action("login_form", "kill_wp_attempt_focus");
function kill_wp_attempt_focus() {
global $error;
$error = TRUE;
}
A correção rápida
A correção acima evita que a função seja disparada, o que significa que você também não obterá o foco automático adequado. Há outra maneira de contornar isso: armazenar em buffer a saída HTML e modificá-la via ob_start
, conforme inspirado em Geeklab . O armazenamento em buffer nos permite remover partes específicas do código - nesse caso, a parte autoclear d.value = ''
. Não esqueça de liberar o buffer.
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();
}