Как применить фильтр "retrieve_password_message"?

6 сент. 2014 г., 20:52:39
Просмотры: 15.5K
Голосов: 4

Я хочу изменить текст письма для сброса пароля, которое отправляет WordPress, на более дружелюбный вариант.

Пытаюсь использовать фильтр "retrieve_password_message", но у меня не получается.

Может кто-нибудь показать пример кода?

// Пример использования фильтра retrieve_password_message
add_filter('retrieve_password_message', 'custom_password_reset_email', 10, 4);

function custom_password_reset_email($message, $key, $user_login, $user_data) {
    // Создаем новый текст письма
    $new_message = __("Здравствуйте!", 'text-domain') . "\r\n\r\n";
    $new_message .= sprintf(__("Кто-то запросил сброс пароля для вашей учетной записи %s.", 'text-domain'), $user_login) . "\r\n\r\n";
    $new_message .= __("Если это были не вы, просто проигнорируйте это письмо.", 'text-domain') . "\r\n\r\n";
    $new_message .= __("Чтобы сбросить пароль, перейдите по следующей ссылке:", 'text-domain') . "\r\n\r\n";
    $new_message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . "\r\n";
    
    return $new_message;
}
0
Все ответы на вопрос 3
0

данные ответы имеют хорошие намерения, но не являются идеальными. У функции фильтра есть больше параметров, а именно 4.

это сработало у меня для сообщения (я хотел заменить имя пользователя на email пользователя)

примечание: у нас мультисайт. Возможно, вам захочется заменить network_site_url на get_site_url()

обычно в файле functions.php вашей темы WordPress:

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

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

  $message = "Кто-то запросил сброс пароля для следующей учетной записи:

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

Если это ошибка, просто проигнорируйте это письмо, и ничего не произойдет.

Для сброса пароля перейдите по следующей ссылке:

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

Если у вас возникли дополнительные вопросы, напишите нам на help@myapp.com

Команда Myapp";


  return $message;

}

бонус: изменить заголовок / тему письма

add_filter( 'retrieve_password_title',
  function( $title )
  {
    $title = __( 'Сброс пароля для myapp.org' );
    return $title;
  }
);
4 апр. 2017 г. 17:45:46
2

Я подумал, что этот фрагмент кода может быть полезен для тех, кто хочет настроить email для сброса пароля.

//* Письмо активации сброса пароля -> Тело письма
add_filter( 'retrieve_password_message', 'wpse_retrieve_password_message', 10, 2 );
function wpse_retrieve_password_message( $message, $key ){
    $user_data = '';
    // Если значение не передано, возвращаем false
    if( ! isset( $_POST['user_login'] )  ){
            return '';
    }
    // Получаем информацию о пользователе из user_login
    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);
    }
    if( ! $user_data  ){
        return '';
    }
    $user_login = $user_data->user_login;
    $user_email = $user_data->user_email;
    // Формируем сообщение для сброса пароля
    $message = "Похоже, вы хотите сбросить пароль!\n\n";
    $message .= "Пожалуйста, перейдите по ссылке:\n";
    $message .= '<a href="';
    $message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login');
    $message .= '">"';
    $message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login');
    $message .= '"</a>\n\n"';
    $message .= 'С уважением,<br/>Команда Dream Team';
    // Возвращаем сформированное сообщение для сброса пароля
    return $message;
}
11 сент. 2014 г. 08:43:47
Комментарии

Вам не нужно проверять данные $_POST для получения user_login. У вас уже есть user_login в параметре хука. Используйте 3 параметр вместо 2. https://developer.wordpress.org/reference/hooks/retrieve_password_message/

hkchakladar hkchakladar
5 нояб. 2017 г. 20:28:32

Извините за минус, но я действительно хотел дать ответу @Toskan шанс подняться наверх - это гораздо лучший ответ, и он использует данные, уже доступные из фильтра, вместо того чтобы воссоздавать их.

squarecandy squarecandy
1 мая 2018 г. 22:13:04
6
add_filter("retrieve_password_message", "your_custom_message", 99, 2);

  function your_custom_message($message, $key)    {

  $message = "your_custom_message";

  return $message;

}

Это пример использования фильтра 'retrieve_password_message'.

Он позволяет переопределить текст email, который пользователь получает при восстановлении пароля.

6 сент. 2014 г. 21:36:24
Комментарии

Обратите внимание: я не тестировал это.

Domain Domain
6 сент. 2014 г. 21:36:59

Пожалуйста, объясните, что это делает.

fuxia fuxia
7 сент. 2014 г. 02:10:56

Привет, спасибо за ввод данных :-) Не могли бы вы добавить код для ссылки сброса пароля.

William William
7 сент. 2014 г. 07:59:29

@toscho, я обновил ответ с пояснениями.

Domain Domain
7 сент. 2014 г. 19:56:14

@William, что именно вас интересует?

Domain Domain
7 сент. 2014 г. 19:57:09

@WisdmLabs В вашем фрагменте кода отсутствует ссылка для сброса пароля. http://exmple.com/wp-login.php?action=rp&key={ ключ } &login={ имя пользователя } :-)

William William
8 сент. 2014 г. 12:33:37
Показать остальные 1 комментариев