J'essaie de personnaliser le courrier électronique de notification envoyé à l'utilisateur qui contient le lien pour définir un mot de passe.
Actuellement, j'ai configuré un enregistrement d'utilisateur personnalisé et des formulaires de connexion aux URL site.com/register
et site.com/login
respectivement.
Après l’enregistrement, wordpress envoie un courrier électronique avec le lien suivant qui demande de définir un mot de passe.
site.com/wp-login.php?action=rp&key=XYieERXh3QinbU4VquB2&login=user%40gmail.com
Je veux qu'il remplace cette URL
site.com/login?action=rp&key=XYieERXh3QinbU4VquB2&login=user%40gmail.com
J'ai essayé le code suivant dans functions.php
add_filter( 'wp_new_user_notification_email', 'my_wp_new_user_notification_email', 10, 3 );
function my_wp_new_user_notification_email( $wp_new_user_notification_email, $user, $blogname ) {
$message = sprintf(__('Username: %s'), $user->user_login) . "\r\n\r\n";
$message .= __('Hello To set your password, visit the following address:') . "\r\n\r\n";
$message .= '<' . network_site_url("login/?key=$key&login=" . rawurlencode($user->user_login), 'login') . ">\r\n\r\n";
$wp_new_user_notification_email['message'] = $message
return $wp_new_user_notification_email;
}
Je pense qu'il me manque des informations $key
puisque le courrier électronique reçu contient le lien suivant:
site.com/login?action=rp&key=&login=user%40test.com
Comment régler ceci?
Vous devez pouvoir affecter la clé générée à votre variable $key
, qui est actuellement non définie.
Vous pouvez contourner ce problème en associant une autre fonction à l'action retrieve_password_key
, qui se déclenche juste après que WordPress ait généré la clé. De par son nom, je pense qu’il existe seulement à cette fin.
function wpse306642_stash_key( $user_login, $key ) {
global $wpse306642_new_user_key;
$wpse306642_new_user_key = $key;
}
add_action( 'retrieve_password_key', 'wpse306642_stash_key', 10, 2 );
Puis remplacez $key
dans votre fonction par $wpse306642_new_user_key
, en le déclarant comme global au début de la fonction.
Utiliser une approche globale juste pour cela donne un sentiment de hacky, mais cela devrait fonctionner.
Vous devez utiliser la fonction get_password_reset_key
(voir référence) qui interrogera la base de données et renverra la clé de réinitialisation du mot de passe de l'utilisateur.
Voici un exemple de travail complet:
add_filter( 'wp_new_user_notification_email', 'custom_wp_new_user_notification_email', 10, 3 );
function custom_wp_new_user_notification_email( $wp_new_user_notification_email, $user, $blogname ) {
$key = get_password_reset_key( $user );
$message = sprintf(__('Welcome to the Community,')) . "\r\n\r\n";
$message .= 'To set your password, visit the following address:' . "\r\n\r\n";
$message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), 'login') . "\r\n\r\n";
$message .= "After this you can enjoy our website!" . "\r\n\r\n";
$message .= "Kind regards," . "\r\n";
$message .= "Support Office Team" . "\r\n";
$wp_new_user_notification_email['message'] = $message;
$wp_new_user_notification_email['headers'] = 'From: MyName<[email protected]>'; // this just changes the sender name and email to whatever you want (instead of the default WordPress <[email protected]>
return $wp_new_user_notification_email;
}