Как применить фильтр "retrieve_password_message"?
Я хочу изменить текст письма для сброса пароля, которое отправляет 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;
}
данные ответы имеют хорошие намерения, но не являются идеальными. У функции фильтра есть больше параметров, а именно 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;
}
);

Я подумал, что этот фрагмент кода может быть полезен для тех, кто хочет настроить 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;
}

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

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, который пользователь получает при восстановлении пароля.

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

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