Come applicare il filtro "retrieve_password_message"?
Vorrei modificare il corpo dell'email di reset password che WordPress invia con qualcosa di più amichevole.
Sto provando a usare il filtro "retrieve_password_message" ma non riesco a farlo funzionare correttamente.
Qualcuno potrebbe gentilmente postare un esempio di codice?
le risposte fornite hanno buone intenzioni, ma non sono corrette. La funzione di filtro ha più parametri, 4 per l'esattezza.
questa soluzione ha funzionato per me per il messaggio (volevo sostituire il nome utente con l'email dell'utente)
nota: abbiamo una pagina multisito. Potresti voler sostituire network_site_url con get_site_url()
tipicamente nel tuo functions.php
del tema WordPress:
add_filter("retrieve_password_message", "mapp_custom_password_reset", 99, 4);
function mapp_custom_password_reset($message, $key, $user_login, $user_data ) {
$message = "Qualcuno ha richiesto un reset della password per il seguente account:
" . sprintf(__('%s'), $user_data->user_email) . "
Se è stato un errore, ignora questa email e non succederà nulla.
Per reimpostare la tua password, visita il seguente indirizzo:
" . '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . ">\r\n" . "
Se hai ulteriori problemi, inviaci un'email a help@myapp.com
Il Team Myapp";
return $message;
}
bonus: cambia il titolo/oggetto dell'email
add_filter( 'retrieve_password_title',
function( $title )
{
$title = __( 'Reset password per myapp.org' );
return $title;
}
);

Pensavo che questo frammento di codice potesse essere utile a chiunque stia cercando di personalizzare l'email di reset della password.
//* Email di attivazione per il reset della password -> Corpo
add_filter( 'retrieve_password_message', 'wpse_retrieve_password_message', 10, 2 );
function wpse_retrieve_password_message( $message, $key ){
$user_data = '';
// Se non viene inviato alcun valore, restituisce false
if( ! isset( $_POST['user_login'] ) ){
return '';
}
// Recupera le informazioni dell'utente da 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;
// Configurazione del messaggio per il recupero password
$message = "Sembra che tu voglia reimpostare la tua password!\n\n";
$message .= "Per favore clicca su questo link:\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 .= 'Cordiali saluti,<br/>Dream Team';
// Restituisce il messaggio completo per il recupero password
return $message;
}

Non è necessario controllare i dati $_POST
per ottenere user_login. Hai già user_login
nel parametro dell'hook. Usa 3 parametri invece di 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;
}
Questo è un esempio di utilizzo dell'hook filter 'retrieve_password_message'.
Serve per sovrascrivere il corpo dell'email che qualcuno riceve durante il recupero della password.

Ciao, grazie per il contributo :-) Potresti per favore aggiungere il codice per il link di reimpostazione della password.

@WisdmLabs Il link per il reset della password manca nel tuo snippet. http://exmple.com/wp-login.php?action=rp&key={ la chiave } &login={ lo username } :-)
