如何修改默认的重置(丢失)密码电子邮件文本?

时间:2018-12-05 作者:jord8on

我在这里发现了一些类似的问题,但无法应用提供的解决方案。

Wordpress发送的标准密码重置电子邮件没有为重置密码的用户提供可单击的url。以下是当前电子邮件的外观:enter image description here

似乎网站url(https://jewelbound.com) 应位于底部,连接到“/wp login.php?操作……”

请帮助我了解如何修改以下电子邮件模板代码以删除“https://jewelbound.com/“从顶部的url,将其添加到底部提供的url,并将其设置为一个长的、连接的(可单击的)url,允许用户重置密码。以下是我的wp-login.php文件中的模板:

$message = __( \'Someone has requested a password reset for the following account:\' ) . "\\r\\n\\r\\n";
    /* translators: %s: site name */
    $message .= sprintf( __( \'Site Name: %s\'), $site_name ) . "\\r\\n\\r\\n";
    /* translators: %s: user login */
    $message .= sprintf( __( \'Username: %s\'), $user_login ) . "\\r\\n\\r\\n";
    $message .= __( \'If this was a mistake, just ignore this email and nothing will happen.\' ) . "\\r\\n\\r\\n";
    $message .= __( \'To reset your password, visit the following address:\' ) . "\\r\\n\\r\\n";
    $message .= \'<\' . network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user_login ), \'login\' ) . ">\\r\\n";

    /* translators: Password reset email subject. %s: Site name */
    $title = sprintf( __( \'[%s] Password Reset\' ), $site_name );
提前感谢任何愿意提供帮助的人!

1 个回复
SO网友:butlerblog

要回答您的特定问题,“如何修改默认重置(丢失)密码电子邮件文本”,答案是使用retrieve_password_message 滤器最终,这可能是解决你问题的一种方法。

但我认为你需要再深入一点,弄清楚到底发生了什么。在您的问题中,您询问了有关修改“默认重置密码电子邮件文本”的问题,但您实际拥有的并不是真正的默认设置。如果是,URL字符串将全部放在一起,而不是像现在这样分开。

我将首先停用所有插件,并从使用WP默认主题的任何主题切换。换句话说,这是一个非常基本的安装,没有干扰。那就试试吧。如果你没有得到同样的结果,那么在某个地方有什么东西把URL弄乱了。有用于的筛选器retrieve_password_messagenetwork_site_url 这可能会允许某些过滤器功能在某个地方导致您的问题。禁用插件和使用基本主题而不进行修改应该会让您发现情况是否如此。

最终,如果您无法跟踪它,则在retrieve_password_message 过滤器将为您解决任何问题。下面的过滤器复制默认消息。它包括一个潜在的URL生成解决方案,以防某个链接到network_site_url 是罪魁祸首。如果是,请使用备选方案,并按指示对域进行硬编码。

add_filter( \'retrieve_password_message\', \'my_retrieve_password_message\', 10, 4 );
function my_retrieve_password_message( $message, $key, $user_login, $user_data ) {

    // Start with the default content.
    $site_name = wp_specialchars_decode( get_option( \'blogname\' ), ENT_QUOTES );
    $message = __( \'Someone has requested a password reset for the following account:\' ) . "\\r\\n\\r\\n";
    /* translators: %s: site name */
    $message .= sprintf( __( \'Site Name: %s\' ), $site_name ) . "\\r\\n\\r\\n";
    /* translators: %s: user login */
    $message .= sprintf( __( \'Username: %s\' ), $user_login ) . "\\r\\n\\r\\n";
    $message .= __( \'If this was a mistake, just ignore this email and nothing will happen.\' ) . "\\r\\n\\r\\n";
    $message .= __( \'To reset your password, visit the following address:\' ) . "\\r\\n\\r\\n";
    $message .= \'<\' . network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user_login ), \'login\' ) . ">\\r\\n";

    /*
     * If the problem persists with this filter, remove
     * the last line above and use the line below by
     * removing "//" (which comments it out) and hard
     * coding the domain to your site, thus avoiding
     * the network_site_url() function.
     */
    // $message .= \'<http://yoursite.com/wp-login.php?action=rp&key=\' . $key . \'&login=\' . rawurlencode( $user_login ) . ">\\r\\n";

    // Return the filtered message.
    return $message;

}