ฟังก์ชัน JavaScript wp_attempt_focus
ทำให้เกิดปัญหานี้ ฟังก์ชั่นเริ่มทำงานหลังจากโหลดหน้าไม่นานให้ล้างแบบฟอร์มและมุ่งเน้นไปที่บังคับให้ผู้ใช้ป้อนข้อมูลการเข้าสู่ระบบด้วยตนเอง
Chrome กำลังกรอกชื่อผู้ใช้และรหัสผ่านโดยอัตโนมัติเพียงมิลลิวินาทีก่อนที่ฟังก์ชัน JS จะล้างฟิลด์ Chrome ไม่ได้รับการเปลี่ยนแปลงอย่างถูกต้องโดยแสดงฟิลด์ที่เติมสีเหลืองแม้ว่าฟิลด์นั้นจะว่างเปล่าจริง ๆ
แม้ว่าฉันจะชอบฟังก์ชั่นออโต้โฟกัส แต่ฉันก็ไม่สามารถนึกถึงเหตุผลที่ดีที่ใคร ๆ ก็อยากให้แบบฟอร์มชัดเจนโดยอัตโนมัติ
แหล่งที่มา
น่าเศร้าที่ฟังก์ชั่นได้รับการ hardcoded 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();
}