Cómo aplicar el filtro "retrieve_password_message"
Me gustaría cambiar el cuerpo del correo de recuperación de contraseña que envía WordPress por algo más amigable.
Estoy intentando usar el filtro "retrieve_password_message" pero lo estoy haciendo mal.
¿Alguien podría compartir un ejemplo de código?

las respuestas dadas tienen buenas intenciones. Pero no son buenas. Hay más parámetros en la llamada a la función del filtro, 4 para ser exactos.
esto funcionó para mí para el mensaje (yo quería reemplazar el nombre de usuario con el correo electrónico del usuario)
nota: tenemos una página multisitio. Quizás quieras reemplazar network_site_url con get_site_url()
típicamente en tu functions.php
de tu tema de WordPress:
add_filter("retrieve_password_message", "mapp_custom_password_reset", 99, 4);
function mapp_custom_password_reset($message, $key, $user_login, $user_data ) {
$message = "Alguien ha solicitado un restablecimiento de contraseña para la siguiente cuenta:
" . sprintf(__('%s'), $user_data->user_email) . "
Si esto fue un error, simplemente ignora este correo y no pasará nada.
Para restablecer tu contraseña, visita la siguiente dirección:
" . '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . ">\r\n" . "
Si tienes más problemas, por favor envíanos un correo a help@myapp.com
El Equipo de Myapp";
return $message;
}
bonus: cambiar el título/asunto del correo
add_filter( 'retrieve_password_title',
function( $title )
{
$title = __( 'Restablecimiento de contraseña para myapp.org' );
return $title;
}
);

Pensé que este fragmento de código podría ser útil para cualquiera que busque personalizar el correo electrónico de restablecimiento de contraseña.
//* Correo electrónico de activación para restablecer contraseña -> Cuerpo
add_filter( 'retrieve_password_message', 'wpse_retrieve_password_message', 10, 2 );
function wpse_retrieve_password_message( $message, $key ){
$user_data = '';
// Si no se envía ningún valor, retorna falso
if( ! isset( $_POST['user_login'] ) ){
return '';
}
// Obtiene la información del usuario desde 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;
// Configura el mensaje para recuperar la contraseña
$message = "¡Parece que quieres restablecer tu contraseña!\n\n";
$message .= "Por favor haz clic en este enlace:\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 .= 'Saludos cordiales,<br/>Equipo de Dream Team';
// Retorna el mensaje completo para recuperar la contraseña
return $message;
}

No necesitas verificar los datos de $_POST
para obtener user_login. Ya tienes user_login
en el parámetro del hook. Usa 3 parámetros en lugar de 2. https://developer.wordpress.org/reference/hooks/retrieve_password_message/

add_filter("retrieve_password_message", "tu_mensaje_personalizado", 99, 2);
function tu_mensaje_personalizado($mensaje, $clave) {
$mensaje = "tu_mensaje_personalizado";
return $mensaje;
}
Este es un ejemplo de uso del filtro 'retrieve_password_message'.
Sirve para personalizar el cuerpo del correo electrónico que recibe un usuario al recuperar su contraseña.

Hola, gracias por tu aporte :-) ¿Podrías agregar el código para el enlace de restablecimiento de contraseña?

@WisdmLabs El enlace para restablecer la contraseña falta en tu fragmento de código. http://exmple.com/wp-login.php?action=rp&key={ la clave } &login={ el nombre de usuario } :-)
