我没有使用默认的WP重置密码表单,而是创建了自己的表单,我被这个准备好的语句难住了。
我试图通过检查用户的user\\u登录名和user\\u activation\\u密钥来更新用户的密码。当我运行这个查询并返回结果时,我得到的是int(0)的返回值。它似乎没有返回任何用户行。
我还回显每个POST变量,以确保其值是正确的,因此我不确定问题所在。
$newpassword = $_POST[\'newpass\'];
$wp_hasher = new PasswordHash(16, FALSE);
$hashedPwd = wp_hash_password($newpassword);
$useremail = $_POST[\'useremail\'];
$key = $_POST[\'key\'];
$resetQuery = $wpdb -> query($wpdb -> prepare("UPDATE wp_users SET user_pass = %s, user_activation_key = \'\' WHERE user_login = %s AND user_activation_key = %s",
$hashedPwd, $useremail, $key));
如果有人能帮助我,那就太好了!谢谢
最合适的回答,由SO网友:s_ha_dum 整理而成
您正在使用用户电子邮件作为用户登录。为便于阅读而格式化的代码如下所示:
$resetQuery = $wpdb -> query(
$wpdb -> prepare(
"UPDATE wp_users
SET user_pass = %s, user_activation_key = \'\'
WHERE user_login = %s AND user_activation_key = %s",
$hashedPwd,
$useremail,
$key
)
);
The
$useremail
参数与
user_login = %s
占位符。
拥有user_login
火柴user_email
不正常。除非您更改了用户注册,以便登录始终与不起作用的电子邮件匹配,我怀疑这是您的问题。您需要重写查询和/或支持代码,以便查询匹配user_login
到user_login
或user_email
到user_email
.