Отключить WordPress' wp_attempt_focus()

Что я имею:

Стандартная страница входа (в частности, страница WordPress wp-login.php по умолчанию).

Вот два живых примера:

  1. https://twentyfourteendemo.wordpress.com/wp-login.php
  2. http://demo.opensourcecms.com/wordpress/wp-login.php

Что мне нужно:

Мне нужно отключить автофокусировку первого текстового поля в форме.

Что я пробовал:

  1. Я пытался скрыть или расположить за пределами экрана текстовое поле, чтобы украсть фокус.
  2. Я попытался установить tabindex для всех входов -1 (очень неидеально).
  3. Я попытался использовать.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);
Другие вопросы по тегам