Trước hết, tôi khuyên bạn không nên chỉnh sửa các tệp cốt lõi vì nó sẽ bị ghi đè khi bạn cập nhật tiếp theo WordPress.
Ngoài ra, bạn nên cập nhật WordPress, bởi vì nó thường sẽ bao gồm các cập nhật bảo mật. (Gần đây đã được báo cáo rằng đã có một loạt các cuộc tấn công vào các trang web sử dụng các phiên bản WordPress lỗi thời)
Để đạt được những gì bạn thực sự muốn làm, tôi khuyên bạn nên sử dụng hook là cách tốt nhất để chỉnh sửa WordPress.
Như vậy, để tạo thêm một trường trên trang đăng nhập của bạn, bạn có thể sử dụng login_form
móc hành động:
add_action('login_form','my_added_login_field');
function my_added_login_field(){
//Output your HTML
?>
<p>
<label for="my_extra_field">My extra field<br>
<input type="text" tabindex="20" size="20" value="" class="input" id="my_extra_field" name="my_extra_field_name"></label>
</p>
<?php
}
Tiếp theo, chúng tôi cần xác minh rằng những gì họ nhập vào trường khớp với những gì bạn đã lưu trữ. Trong đoạn mã sau, tôi đã giả sử bạn đã lưu mã nhận dạng dưới dạng giá trị meta của người dùng bằng khóa meta my_ident_code
. Bạn nên làm điều này hơn là tạo cột của riêng bạn! . Xem các trang Codex cho
Để xác minh người dùng, bạn có thể sử dụng authenticate
bộ lọc. Điều này vượt qua tên người dùng và mật khẩu đã nhập. Nếu mã nhận dạng là chính xác, hãy quay lại null
để cho phép WordPress xác minh mật khẩu và tên người dùng. Nếu không đúng, hãy xóa xác thực của WordPress và trả lại lỗi. Điều này buộc người dùng quay lại trang đăng nhập, nơi họ sẽ thấy lỗi được hiển thị.
add_filter( 'authenticate', 'my_custom_authenticate', 10, 3 );
function my_custom_authenticate( $user, $username, $password ){
//Get POSTED value
$my_value = $_POST['my_extra_field_name'];
//Get user object
$user = get_user_by('login', $username );
//Get stored value
$stored_value = get_user_meta($user->ID, 'my_ident_code', true);
if(!$user || empty($my_value) || $my_value !=$stored_value){
//User note found, or no value entered or doesn't match stored value - don't proceed.
remove_action('authenticate', 'wp_authenticate_username_password', 20);
remove_action('authenticate', 'wp_authenticate_email_password', 20);
//Create an error to return to user
return new WP_Error( 'denied', __("<strong>ERROR</strong>: You're unique identifier was invalid.") );
}
//Make sure you return null
return null;
}