A função JavaScript wp_attempt_focus
está causando esse problema. A função é acionada 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 milissegundos antes que a função JS limpe o campo. O Chrome não capta corretamente as alterações, exibindo campos preenchidos em amarelo, mesmo que os campos estejam realmente vazios.
Embora eu aprecie a funcionalidade de foco automático, não consigo pensar em um bom motivo para alguém querer que o formulário seja limpo automaticamente.
A fonte
Infelizmente, a função foi codificada wp-login.php
nas linhas 913-930 (WordPress 4.0). Alterar o wp-login.php
arquivo por completo é uma má ideia, pois pode ser substituída em qualquer atualização futura do WordPress. Então, teremos que recorrer a um pouco de 'hackers'.
A solução fácil
A wp_attempt_focus
função é 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 disparada fingindo um erro de formulário no momento certo usando ações do WP. Eu escolhi a login_form
ação, pois ela sempre é acionada após o tratamento de erros, logo antes da chamada do JS. Adicione o seguinte código ao seu tema functions.php
(ou arquivo de plug-in):
add_action("login_form", "kill_wp_attempt_focus");
function kill_wp_attempt_focus() {
global $error;
$error = TRUE;
}
A correção hackish
A correção acima impede que a função seja disparada completamente, o que significa que você também não obterá o foco automático adequado. Existe outra maneira de contornar isso: armazenar em buffer a saída HTML e modificá-la via ob_start
, como inspirado no Geeklab . O buffer permite remover partes específicas do código - nesse caso, a parte autoclear d.value = ''
. Não se 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();
}