Tôi vẫn gặp phải sự cố với khóa đặt lại không hoạt động chính xác, liên kết trong email sẽ chuyển hướng tôi đến trang đặt lại mật khẩu tiêu chuẩn với tham số URL cho biết có vấn đề với khóa, vì vậy tôi theo dõi chặt chẽ hơn tệp wp-login.php và bao gồm đối tượng $ wp_hasher, điều này đã khắc phục sự cố và đặt lại mật khẩu trong email hiện hoạt động
if (($_SERVER['REQUEST_METHOD'] === (string) 'POST') && (isset($_POST['reset_pass']))) {
// Acccess global properties
global $wpdb, $wp_hasher;
// Variables
$error_pass_reset = array();
$username = (string) trim($_POST['user_login']);
$user_exists = (bool) false;
// ---- USERNAME OR EMAIL EXISTS ---- //
if (username_exists($username)) {
$user_exists = (bool) true;
$user = (object) get_user_by('login', $username);
} // end if
else if (email_exists($username)) {
$user_exists = (bool) true;
$user = (object) get_user_by('email', $username);
} // end else if
else {
$error_pass_reset[] = '<p>Username or Email was not found, please try again.</p>';
} // end else
// ---- USER EXISTS ---- //
if ($user_exists === (bool) true) {
// Variables
$user_login = (string) $user -> user_login;
$user_email = (string) $user -> user_email;
// Generate password reset key
if (empty($key)) {
$key = (string) wp_generate_password(20, false);
do_action('retrieve_password_key', $user_login, $key);
// Create the $wp_hasher object
if (empty($wp_hasher)) {
require_once(ABSPATH . WPINC . '/class-phpass.php');
$wp_hasher = new PasswordHash(8, true);
}
// Reset key with hasher applied (MD5 has string output)
$hashed = (string) time() . ':' . $wp_hasher -> HashPassword($key);
// Insert the new key into the database
$wpdb -> update(
$wpdb -> users,
array(
'user_activation_key' => $hashed
),
array(
'user_login' => $user_login
)
);
} // end if
// Email message
$message = (string)
'Someone requested that the password be reset for the following account:' . "\r\n\r\n" .
get_option('siteurl') . "\r\n\r\n" .
'Username: ' . $user_login . "\r\n\r\n" .
'If this was a mistake, just ignore this email and nothing will happen.' . "\r\n\r\n" .
'To reset your password, visit the following address:' . "\r\n\r\n" .
get_option('siteurl') . '/wp-login.php?action=rp&key=' . $key . '&login=' . $user_login . "\r\n";
// Send email
if ((bool) false === wp_mail($user_email, get_option('blogname') . ' Password Reset', $message)) {
$error_pass_reset[] = '<p>The e-mail could not be sent at this time.</p>' . "\n";
} // end if
} // end if
// Send the rest password email
do_action('login_form', 'resetpass');
} // end if (($_SERVER['REQUEST_METHOD'] === (string) 'POST') && (isset($_POST['reset_pass'])))
username_exists()
giúp bạn bằng cách nào đó?