La funzione JavaScript wp_attempt_focus
sta causando questo problema. La funzione si attiva poco dopo il caricamento della pagina, cancella il modulo e si concentra su di esso, costringendo gli utenti a inserire manualmente le informazioni di accesso.
Chrome inserisce automaticamente il nome utente e la password, pochi millisecondi prima che la funzione JS cancelli il campo. Chrome non rileva correttamente le modifiche, visualizzando i campi compilati di colore giallo anche se i campi sono effettivamente vuoti.
Anche se apprezzo la funzionalità di messa a fuoco automatica, non riesco a pensare a una buona ragione per cui qualcuno vorrebbe che il modulo venisse cancellato automaticamente.
La fonte
Purtroppo, la funzione è stata codificata wp-login.php
nelle righe 913-930 (WordPress 4.0). Cambiare del wp-login.php
tutto il file è una cattiva idea, poiché potrebbe essere sovrascritto in qualsiasi aggiornamento di WordPress in arrivo. Quindi dovremo ricorrere a un po 'di "hacking".
La soluzione semplice
La wp_attempt_focus
funzione viene chiamata se il modulo non presenta errori. Siamo fortunati: il controllo degli errori viene eseguito tramite PHP. Ciò significa che possiamo semplicemente impedire l'attivazione della funzione falsificando un errore di modulo al momento giusto utilizzando le azioni WP. Ho scelto l' login_form
azione poiché l'azione si attiva sempre dopo la gestione degli errori, subito prima della chiamata JS. Aggiungi il seguente codice al tuo tema functions.php
(o file plugin):
add_action("login_form", "kill_wp_attempt_focus");
function kill_wp_attempt_focus() {
global $error;
$error = TRUE;
}
La correzione hackish
La correzione di cui sopra impedisce che la funzione si attivi del tutto, il che significa che non otterrai neanche l'autofocus corretto. C'è un altro modo ob_start
per aggirarlo : buffering dell'output HTML e modifica tramite , come ispirato da Geeklab . Il buffering ci consente di rimuovere specifiche porzioni di codice - in questo caso, la parte automatica d.value = ''
. Non dimenticare di svuotare il buffer però.
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();
}