Сообщение фильтра сброса пароля WordPress, возвращающее пустой логин

#php #wordpress

#php #wordpress

Вопрос:

Я использую следующий фильтр для замены электронной почты для сброса пароля по умолчанию. Электронное письмо отправляется нормально, хотя при открытии логин отсутствует. Логин добавляется в два сообщения $user_login, и поскольку он возвращается пустым, URL-адрес для сброса пароля также не работает. Все остальное работает нормально, и если я вручную добавлю логин, URL-адрес также будет правильным.

Есть идеи, что это может быть?

 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:'). "rnrn";
    $msg .= network_site_url() . "rnrn";
    $msg .= sprintf(__('Username: %s'), $user_login) . "rnrn";
    $msg .= __('If this message was sent in error, please ignore this email.') . "rnrn";
    $msg .= __('To reset your password, visit the following address:');
    $msg .= network_site_url("wp-login.php?action=rpamp;key=$keyamp;login=" . rawurlencode($user_login), 'login');


    return $msg;

}
  

Ответ №1:

Попробуйте с этим кодом —

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

function my_custom_password_reset($message, $key, $user_login, $user_data ){
        $message = "Someone has requested a password reset for the following account: " . 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=rpamp;key=$keyamp;login=" . rawurlencode($user_login), 'login') . "rn";
         return $message;
 }