You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让PHP邮件中的$reset_url变量成为可点击链接?

解决邮件重置密码链接无法点击的问题

你遇到的问题根源很明确——PHP单引号不会解析内部变量,导致邮件里的链接地址是字符串$reset_url,而不是你实际生成的重置密码URL。

先看你之前的错误写法:

$message .= sprintf(__('<a href="$reset_url">Reset Your Password</a>', 'frontend-reset-password') );

这里__()函数里的字符串用单引号包裹,$reset_url会被当作纯文本输出,而不是替换成真实的重置地址,所以邮件里的链接是无效的,自然无法点击。

正确的两种修改方式:

方式1:使用sprintf占位符(推荐,更规范)

利用sprintf的占位符%s来传递$reset_url变量,同时用esc_url()确保URL的安全性:

$reset_url = som_get_lost_password_url() . "?somresetpass=true&action=rp&key=$key&login=" . rawurlencode($user_login);

$message = __( 'Someone requested that the password be reset for the following account:', 'frontend-reset-password' ) . "<br><br>";
$message .= sprintf( __( 'Username: %s', 'frontend-reset-password' ), $user_login ) . "<br><br>";
$message .= home_url( '/' ) . "<br><br>";
$message .= __( 'If this was a mistake, just ignore this email and nothing will happen.', 'frontend-reset-password' ) . "<br><br>";
$message .= __( 'To reset your password, visit the following address:', 'frontend-reset-password' ) . "<br><br>";

// 这里是修改后的核心代码
$message .= sprintf(
    '<a href="%s">Reset Your Password</a>',
    esc_url($reset_url)
);

方式2:直接字符串拼接

如果觉得sprintf麻烦,也可以直接拼接字符串,同样记得用esc_url()处理URL:

// 核心修改部分
$message .= __( 'To reset your password, visit the following address:', 'frontend-reset-password' ) . "<br><br>";
$message .= '<a href="' . esc_url($reset_url) . '">Reset Your Password</a>';

额外提醒

  • 用esc_url()处理URL是必要的,它会自动过滤掉不安全的字符,避免XSS攻击,同时保证URL格式正确。
  • 确保你的邮件是HTML格式发送的,如果邮件是纯文本格式,HTML标签会被当作纯文本显示,链接也无法点击。Front End Reset Password插件一般默认支持HTML邮件,但如果还是有问题,可以检查插件设置里的邮件格式选项。

内容的提问来源于stack exchange,提问作者daro2013

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:51:45