답변:
JavaScript 기능 wp_attempt_focus
으로 인해이 문제가 발생합니다. 이 기능은 페이지를로드 한 직후에 실행되고 양식을 지우고 그에 초점을 맞추므로 사용자가 수동으로 로그인 정보를 입력해야합니다.
Chrome이 사용자 이름과 비밀번호를 자동으로 채우고 있습니다. JS 기능이 필드를 지우기 직전에 밀리 초입니다. Chrome이 변경 사항을 제대로 선택하지 않아 필드가 실제로 비어 있어도 노란색으로 채워진 필드가 표시됩니다.
자동 초점 기능에 감사하지만 양식을 자동으로 지우려는 사람이 좋은 이유는 없습니다.
wp-login.php
안타깝게도이 기능은 913-930 행 (WordPress 4.0) 으로 하드 코딩되었습니다 . wp-login.php
향후 WordPress 업데이트에서 파일을 덮어 쓸 수 있으므로 파일을 완전히 변경 하는 것은 좋지 않습니다. 따라서 우리는 약간의 '해킹'에 의지해야합니다.
wp_attempt_focus
형태에 오류가없는 경우 함수가 호출된다. 운이 좋았습니다-오류 점검은 PHP를 통해 이루어집니다. 즉, WP 작업을 사용하여 적시에 양식 오류를 발생시켜 함수가 실행되지 않도록 할 수 있습니다. JS 호출 직전에 오류 처리 후login_form
작업이 항상 발생 하기 때문에 작업을 선택 했습니다. 테마 (또는 플러그인 파일)에 다음 코드를 추가하십시오 .functions.php
add_action("login_form", "kill_wp_attempt_focus");
function kill_wp_attempt_focus() {
global $error;
$error = TRUE;
}
위의 수정은 함수가 완전히 실행되는 것을 방지하므로 적절한 자동 초점을 얻지 못합니다. Geeklab에서ob_start
영감을 얻은 것처럼 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