Cómo desactivar el autocompletado en la página wp-login.php
Parece que no hay una forma sencilla de agregar autocomplete="off" al campo de contraseña en la página de inicio de sesión de WordPress sin editar directamente el archivo wp-login.php.
¿Hay algo que me esté perdiendo? No quiero modificar archivos del núcleo.
Tu única solución (sin modificar archivos principales) es usar 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' );
Dicho esto, si no eres el único que va a iniciar sesión, te aconsejaría que no desactives el autocompletado, ya que casi seguro que **** a la gente.
Si a alguien le interesa, esta es una solución que me funcionó
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);
Aquí hay una solución solo con PHP que se me ocurrió:
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);
Es un pequeño truco del filtro esc_attr, cierra el atributo id del campo de contraseña y luego agrega el atributo autocomplete (el valor new-password se usa para Chrome).
alguien ha creado un plugin para hacer exactamente eso, no está en los plugins de WordPress pero es bastante simple y funciona de maravilla. Es buena práctica echar un vistazo al código fuente si no estás seguro acerca de plugins que no están listados en wp plugins, yo lo hice y no hay nada malicioso en él.
puedes ver el código aquí: https://www.buzelac.com/2014/10/disabling-wordpress-login-password-autocomplete/
o descargar el plugin aquí: https://www.buzelac.com/wp-content/uploads/2015/05/disable-login-autocomplete.zip
no hay mucho en él, simplemente reemplaza el 'id="user_pass"' con 'id="user_pass" autocomplete="off"' cuando se genera el formulario de login:
$content = str_replace('id="user_pass"', 'id="user_pass" autocomplete="off"', $content);
Prueba el Buffering de Salida en PHP:
add_action('login_header', function () {
ob_start(); // Inicia el buffer de salida
});
add_action('login_footer', function () {
$content = ob_get_clean(); // Obtiene el contenido del buffer y lo limpia
$content = str_replace(' name="log"', ' name="log" autocomplete="off"', $content); // Desactiva autocompletado para el campo de usuario
$content = str_replace(' name="pwd"', ' name="pwd" autocomplete="off"', $content); // Desactiva autocompletado para el campo de contraseña
echo $content; // Imprime el contenido modificado
});