Come disattivare l'autocompletamento nella pagina wp-login.php
Sembra che non ci sia un modo semplice per aggiungere autocomplete="off" al campo password nella pagina di login di WordPress senza modificare direttamente il file wp-login.php.
Mi sto perdendo qualcosa? Non voglio modificare i file core.
La tua unica soluzione (senza modificare i file core) è utilizzare JavaScript.
function wpse_159462_login_form() {
echo <<<html
<script>
document.getElementById( "user_pass" ).autocomplete = "off";
</script>
html;
}
add_action( 'login_form', 'wpse_159462_login_form' );
Detto questo, se non sei l'unico che effettuerà l'accesso ti sconsiglio di disabilitare l'autocompletamento, quasi sicuramente farà infuriare le persone.
Se a qualcuno interessa, questa è una soluzione che ha funzionato per me
if ( $GLOBALS['pagenow'] === 'wp-login.php' ) {
ob_start();
}
add_action('login_form', function($args) {
$login = ob_get_contents();
ob_clean();
$login = str_replace('id="user_pass"', 'id="user_pass" autocomplete="off"', $login);
$login = str_replace('id="user_login"', 'id="user_login" autocomplete="off"', $login);
echo $login;
}, 9999);
Ecco una soluzione che ho ideato utilizzando solo PHP:
function disable_autofill_password($safe_text, $text) {
if($safe_text === 'user_pass') {
$safe_text .= '" autocomplete="new-password';
}
return $safe_text;
}
add_filter('attribute_escape', 'disable_autofill_password', 10, 2);
Si tratta di un piccolo hack del filtro esc_attr, che chiude l'attributo id del campo password e aggiunge l'attributo autocomplete (il valore new-password viene utilizzato da Chrome).
qualcuno ha creato un plugin proprio per questo, non è presente tra i plugin di WordPress ma è piuttosto semplice e funziona perfettamente. È buona norma dare un'occhiata al codice sorgente se hai dubbi su plugin non elencati su wp plugins, io l'ho fatto e non c'è nulla di dannoso al suo interno.
vedi il codice qui: https://www.buzelac.com/2014/10/disabling-wordpress-login-password-autocomplete/
oppure scarica il plugin qui: https://www.buzelac.com/wp-content/uploads/2015/05/disable-login-autocomplete.zip
non c'è molto da dire, semplicemente sostituisce 'id="user_pass"' con 'id="user_pass" autocomplete="off"' quando viene generato il form di login:
$content = str_replace('id="user_pass"', 'id="user_pass" autocomplete="off"', $content);
Prova il buffering dell'output in PHP:
add_action('login_header', function () {
ob_start();
});
add_action('login_footer', function () {
$content = ob_get_clean();
$content = str_replace(' name="log"', ' name="log" autocomplete="off"', $content);
$content = str_replace(' name="pwd"', ' name="pwd" autocomplete="off"', $content);
echo $content;
});