Функция JavaScript wp_attempt_focus
вызывает эту проблему. Функция запускается вскоре после загрузки страницы, очищает форму и фокусируется на ней, заставляя пользователей вручную вводить свои данные для входа.
Chrome автоматически вводит имя пользователя и пароль, всего за миллисекунды, прежде чем функция JS очистит поле. Chrome неправильно фиксирует изменения, отображая заполненные поля желтого цвета, даже если поля на самом деле пусты.
Хотя я ценю функциональность автофокуса, я не могу придумать вескую причину, по которой кто-то хотел бы, чтобы форма автоматически очищалась.
Источник
К сожалению, функция была жестко закодирована wp-login.php
в строках 913-930 (WordPress 4.0). Изменение wp-login.php
файла вообще - плохая идея, так как он может быть перезаписан в любом следующем обновлении WordPress. Поэтому нам придется прибегнуть к небольшому взлому.
Легко исправить
wp_attempt_focus
Функция вызывается , если форма не имеет ошибок. Нам повезло - проверка ошибок производится через PHP. Это означает, что мы можем просто предотвратить запуск функции, подделав ошибку формы в нужное время, используя действия WP. Я выбрал login_form
действие, поскольку оно всегда срабатывает после обработки ошибок, прямо перед вызовом JS. Добавьте следующий код к вашей теме functions.php
(или файлу плагина):
add_action("login_form", "kill_wp_attempt_focus");
function kill_wp_attempt_focus() {
global $error;
$error = TRUE;
}
Хакерское исправление
Приведенное выше исправление предотвращает полное срабатывание функции, что означает, что вы не получите надлежащую автофокусировку. Там еще один способ вокруг него: буферизация вывода HTML и изменить его с помощью ob_start
, так как вдохновленный Geeklab . Буферизация позволяет нам удалять определенные части кода - в данном случае, автоматическую часть d.value = ''
. Не забудьте очистить буфер, хотя.
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();
}