Отключить WordPress' wp_attempt_focus()
Что я имею:
Стандартная страница входа (в частности, страница WordPress wp-login.php по умолчанию).
Вот два живых примера:
- https://twentyfourteendemo.wordpress.com/wp-login.php
- http://demo.opensourcecms.com/wordpress/wp-login.php
Что мне нужно:
Мне нужно отключить автофокусировку первого текстового поля в форме.
Что я пробовал:
- Я пытался скрыть или расположить за пределами экрана текстовое поле, чтобы украсть фокус.
- Я попытался установить tabindex для всех входов -1 (очень неидеально).
- Я попытался использовать.blur() для автофокусированного текстового поля.
Ни один из подходов не работает.
2 ответа
Для тех, кто пришел из Google, теперь есть ловушка для этого в ядре (исправлено из V5.2, могло быть раньше!).
wp-login.php:1149 enable_login_autofocus: логический
add_filter('enable_login_autofocus', '__return_false');
Отключит фрагмент javascript с автофокусом
Я разместил несколько решений на WordPress SE здесь. В принципе, есть два способа (в WordPress 4.0), которые не требуют изменения самого кода. Полностью убейте функцию, используя грязный хак:
add_action("login_form", "kill_wp_attempt_focus");
function kill_wp_attempt_focus() {
global $error;
$error = TRUE;
}
Или используйте решение Geeklab для изменения кода HTML с помощью буферизации, что позволяет вам специально убить автофокус. Удачи!
Я нашел решение, основанное на функции setTimeout charlietfl.
setTimeout(function() {
$( '<input type="text" id="focusfix" style="position:absolute; top:-1000px;"/>' ).insertBefore( "#loginform #user_login" );
$('#loginform #focusfix').focus();
$('#loginform #focusfix').select();
}, 205);