wordpress - $user_login 不会在 key 后附加到 WP 密码重置链接

标签 wordpress wordpress-login

我正在为 Wordpress 通知使用 HTML 自定义电子邮件模板。

每个模板都可以正常工作。但出于某种原因 - 密码重置模板(否则工作正常)不会在密码重置链接的末尾附加 user_login 变量 - 这对于 key 有效至关重要。没有 $user_login 的链接会在 WP 密码重置页面上呈现“无效 key ”错误。

链接中的字符串示例如下 - 请注意最后缺少的 login=username

url/wp-login.php?redirect_to=url?action=rp&key=12345678910&login=http://url.com/wp-login.php?redirect_to=url?action=rp&key=12345678910&login=

这是我用来修改模板的代码。有谁知道为什么会这样 - 如果是这样,我该如何解决?

add_filter ('retrieve_password_message', 'custom_retrieve_password_message', 10, 2);
function custom_retrieve_password_message($content, $key) {
global $wpdb;
$user_login = $wpdb->get_var("SELECT user_login FROM $wpdb->users WHERE user_activation_key = '$key'");
ob_start();
$email_subject = custom_retrieve_password_title();
include('email_header.php');
?>

<p>It looks like you need to reset your password for your account!</p>
<p>To reset your password, visit the following address, otherwise just ignore this email and nothing will happen.<p>
<a href="<?php echo wp_login_url("url") ?>?action=rp&key=<?php echo $key ?>&login=<?php echo $user_login ?>">Reset password</a> 

<?php
include('email_footer.php');
$message = ob_get_contents();
ob_end_clean();
return $message;
}

最佳答案

我认为问题在于 wordpress 改变了用户激活 key 在数据库中的保存方式。 key 在保存到 wp_users 表之前经过哈希处理,$key 包含未经哈希处理的纯文本激活 key 。因此,您的以下代码行不会得到结果,$user_login 将为空。

$user_login = $wpdb->get_var("SELECT user_login FROM $wpdb->users WHERE user_activation_key = '$key'");

试试这个:

add_filter ('retrieve_password_message', 'custom_retrieve_password_message', 10, 2);
function custom_retrieve_password_message($content, $key) {
global $wpdb;
$user_data = get_user_by_email(trim($_POST['user_login']));
$user_login = $user_data->user_login;
ob_start();
$email_subject = custom_retrieve_password_title();
include('email_header.php');
?>

<p>It looks like you need to reset your password for your account!</p>
<p>To reset your password, visit the following address, otherwise just ignore this email and nothing will happen.<p>
<a href="<?php echo wp_login_url("url") ?>?action=rp&key=<?php echo $key ?>&login=<?php echo $user_login ?>">Reset password</a> 

<?php
include('email_footer.php');
$message = ob_get_contents();
ob_end_clean();
return $message;
}

关于wordpress - $user_login 不会在 key 后附加到 WP 密码重置链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20020443/

相关文章:

php - 刷新页面时用户已注销

php - WordPress 您的 session 已过期

php - 连接参数中的字符串 (php)

javascript - 为什么我的 CSS 鱼眼停靠栏菜单不起作用?

CSS - 表单不调整大小

sql - SQL查询的确认

php - 自从日期字符串与 WordPress 开始成为成员(member)?

php - 移动 WordPress 后,可以登录,但不再有管理员访问权限

php - 如何仅使用他们的 user_id 将用户登录到 Wordpress