Answers:
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;
}
上面的修复阻止了功能完全触发,这意味着您也不会获得正确的自动对焦。有另一种解决方法:ob_start
受Geeklab的启发,缓冲HTML输出并通过对其进行修改。缓冲允许我们删除代码的特定部分-在这种情况下,即自动清除部分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();
}
我的密码为空/空,因此我尝试将其更改为其他名称,例如“ 1234”。添加空间并删除它既无效也不禁用JS。还尝试了其他浏览器,所以真的只在Chrome中使用吗?
我所做的是更改了数据库中的密码哈希,并且该哈希有效。
wp_users.user_pass
。
就我而言,密码1234
是BCrypted:$2a$06$x4lljZOw0Cfuj7jy6qsdp./iX34gaDUMXQIQob4VIHLXQ5yI92RjC