首页 > 解决方案 > 编辑默认的 Wordpress 密码重置电子邮件

问题描述

所以我首先尝试使用retrieve_password_message过滤器,但不幸的是我在网站上输入电子邮件时没有收到任何回复,也没有发送任何电子邮件。(顺便说一句,我正在使用 OceanWP 弹出登录)

add_filter( 'retrieve_password_message', 'my_retrieve_password_message', 10, 4 );

function my_retrieve_password_message( $message, $key, $user_login, $user_data ) {

    $site_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
    $message = __( 'Die Passwortzurücksetzung wurde für das folgende Konto beantragt:' ) . "\r\n\r\n";
    /* translators: %s: site name */
    $message .= sprintf( __( 'Name der Website: %s' ), $site_name ) . "\r\n\r\n";
    /* translators: %s: user login */
    $message .= sprintf( __( 'Username: %s' ), $user_login ) . "\r\n\r\n";
    $message .= __( 'Wenn dies ein Fehler war, ignorieren Sie diese E-Mail einfach, und es wird nichts passieren.' ) . "\r\n\r\n";
    $message .= __( 'Um Ihr Passwort zurückzusetzen, besuchen Sie die folgende Adresse:' ) . "\r\n\r\n";
    $message .= '<https://smartinvestor.de/wp-login.php?action=rp&key=' . $key . '&login=' . rawurlencode( $user_login) . ">\r\n";

    return $message;

}

我有一种感觉,它与 $user_login 有关。所以我然后尝试从过滤器中重建数据。现在用户收到回复并发送电子邮件(上面的代码我没有收到),但不幸的是登录似乎有问题。$user_login 不起作用,它只是返回空白,这意味着密码重置 url 不起作用。

如果我手动输入登录名,则 url 有效,确认它与密钥无关。我的理论是,因为用户名不是修剪后的电子邮件,所以它返回错误?如何在不从电子邮件中获取 user_login 的情况下获取它。

add_filter('retrieve_password_message', 'my_reset_password_message', null, 2);

function my_reset_password_message( $message, $key ) {

    if ( strpos($_POST['user_login'], '@') ) {
        $user_data = get_user_by('email', trim($_POST['user_login']));
    } else {
        $login = trim($_POST['user_login']);
        $user_data = get_user_by('login', $login);
    }

    $user_login = $user_data->user_login;

    $msg = __('The password for the following account has been requested to be reset:'). "\r\n\r\n";
    $msg .= network_site_url() . "\r\n\r\n";
    $msg .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n";
    $msg .= __('If this message was sent in error, please ignore this email.') . "\r\n\r\n";
    $msg .= __('To reset your password, visit the following address:');
    $msg .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login');


    return $msg;

}

标签: phpwordpress

解决方案


我建议使用钩子本身提供的 user_login,试试这样。

add_filter("retrieve_password_message", "my_reset_password_message", 99, 4);

function my_reset_password_message($message, $key, $user_login, $user_data )    {

    $message = "The password for the following account has been requested to be reset:

    " . sprintf(__('%s'), $user_data->user_email) . "

    If this was a mistake, just ignore this email and nothing will happen.

    To reset your password, visit the following address:

    " . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . "\r\n";

    return $message;

}

我检查了您在您的网站上使用的重置邮件表格。对于用户名/电子邮件字段,您使用“opl_user_or_email”而不是“user_login”,因此 user_login 字段为空,您可以更改表单并将“opl_user_or_email”替换为“user_login”,我建议您这样做,或者您可以替换 $_POST[ "user_login"] 在你的第二种方法中使用 $_POST["opl_user_or_email"]。

在此处输入图像描述


推荐阅读