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();
}