web-dev-qa-db-fra.com

Comment ajouter usermeta au message électronique "Avis de modification de courrier électronique"

En espérant que quelqu'un puisse aider.

J'essaie de changer le texte "Avis de changement de courrier électronique" dans le courrier électronique que vous recevez lors de la mise à jour d'une adresse électronique.

Voici ce que j'ai jusqu'ici

add_filter( 'password_change_email', 'red_change_password_mail_message', 10, 3 );

function red_change_password_mail_message( $pass_change_mail, $user, $userdata ) {

 $new_message_txt = __( 'Hi [first_name] [last_name], 

 This notice confirms that your email was changed on IBEW Local 353.

 If you did not change your email, please contact the Site Administrator at [email protected]

 This email has been sent to [user_email]

 Regards,
 All at IBEW Local 353' );
 $pass_change_mail[ 'message' ] = $new_message_txt;
 return $pass_change_mail;

}

Comme vous pouvez le constater, je souhaite personnaliser le message électronique avec son nom et son prénom. Quel serait le meilleur moyen de le faire et si quelqu'un pouvait me donner un exemple pour commencer, s'il vous plaît.

2
DigitalDesigner

Le filtre à utiliser pour modifier le courrier électronique envoyé à un utilisateur lorsqu'il modifie son adresse adresse électronique est email_change_email. Notez que cela diffère de password_change_email que vous avez utilisé dans votre code d'origine. Ce filtre vous permet de modifier le courrier électronique envoyé à l'utilisateur lorsque son mot de passe est modifié.

Ces deux filtres fonctionnent de manière similaire, mais il est important de faire la distinction entre les deux. Les deux filtres apparaissent dans wp-includes/user.php.

  • Dans le code ci-dessous, nous utilisons le email_change_email pour modifier le texte du message. Les nouveaux espaces réservés, ###FIRST_NAME### et ###LAST_NAME###, ont été ajoutés au code (et à la documentation) ci-dessous.

  • Les espaces réservés standard dans la mesure du possible dans le texte du message, au lieu de coder en dur les chaînes.

  • En outre, un domaine de texte a été ajouté au texte du message personnalisé. Il est toujours recommandé d'ajouter un domaine de texte aux chaînes transmises aux fonctions gettext (__(), _e(), etc.).

/**
 * Filters the contents of the email sent when the user's email is changed.
 *
 * @param array $email_change_email {
 *            Used to build wp_mail().
 *            @type string $to      The intended recipients.
 *            @type string $subject The subject of the email.
 *            @type string $message The content of the email.
 *                The following strings have a special meaning and will get replaced dynamically:
 *                - ###USERNAME###    The current user's username.
 *                - ###FIRST_NAME###  The current user's first name.
 *                - ###LAST_NAME###   The current user's last name.
 *                - ###ADMIN_EMAIL### The admin email in case this was unexpected.
 *                - ###EMAIL###       The old email.
 *                - ###SITENAME###    The name of the site.
 *                - ###SITEURL###     The URL to the site.
 *            @type string $headers Headers.
 *        }
 * @param array $user The original user array.
 * @param array $userdata The updated user array.
 */
add_filter( 'email_change_email', 'red_email_change_email', 10, 3 );
function red_email_change_email( $email_change_email, $user, $userdata ) {

    $new_message_txt = __( 'Hi ###FIRST_NAME### ###LAST_NAME###, 

This notice confirms that your email was changed on ###SITENAME###.

If you did not change your email, please contact the Site Administrator at
###ADMIN_EMAIL###

This email has been sent to ###EMAIL###

Regards,
All at ###SITENAME###' );

    $email_change_email['message']  = $new_message_txt;

    $email_change_email['message'] = str_replace( '###FIRST_NAME###', $user['first_name'], $email_change_email['message'] );
    $email_change_email['message'] = str_replace( '###LAST_NAME###',  $user['last_name'],  $email_change_email['message'] );

    // Debugging helper. Uncomment to turn on.
    // update_option( 'wpse_debug_email_change_email_user', $user );

    return $email_change_email;
}

Débogage

J'ai vérifié que ce code affiche le nom et le prénom de l'utilisateur. Cette information provient de la table méta de l'utilisateur, mais elle est déjà configurée pour nous via le tableau $user par le noyau. J'ai remplacé manuellement toutes les informations personnelles par**REMOVED**.

Exemple de courrier électronique:

Hi Dave (first name) Romsey (last name),

This notice confirms that your email was changed on WP Theme Testing.

If you did not change your email, please contact the Site Administrator at
**REMOVED**

This email has been sent to **REMOVED**

Regards,
All at WP Theme Testing

Voici le contenu du tableau $user:

Array
(
    [ID] => 1
    [user_login] => dave
    [user_pass] => **REMOVED**
    [user_nicename] => dave
    [user_email] => **REMOVED**
    [user_url] => http://example.com/
    [user_registered] => 2016-02-14 05:29:13
    [user_activation_key] => 
    [user_status] => 0
    [display_name] => dave
    [first_name] => Dave (first name)
    [last_name] => Romsey (last name)
    [nickname] => dave
    [description] => This is the author’s test! <a href=\"#\">test link</a>
    [rich_editing] => true
    [comment_shortcuts] => false
    [admin_color] => fresh
    [use_ssl] => 0
    [show_admin_bar_front] => true
    [locale] => 
)

Voici une fonction qui affiche le tableau $user dans la console de la zone d'administration une fois la ligne de débogage activée dans le code d'origine ci-dessus.

/**
 * Debugging helper. Outputs $user array to console in admin area. 
 * This data is saved via debugging line in red_email_change_email().
 */
add_action( 'admin_head', 'wpse_debug_option' );
function wpse_debug_option() {
    $value = get_option( 'wpse_debug_email_change_email_user' );
    echo '<script>console.log( ' . json_encode( $value ) . ');</script>';
}
1
Dave Romsey

Vous passez déjà un objet $user dans votre fonction, vous devriez donc pouvoir le remplacer par $user->first_name et $user->last_name.

Donc changez simplement $new_message_txt en:

$new_message_txt = __('Hi ' . $user->first_name ' . ' ' . $user->last_name . ',
...(rest of your message)
... ' . $pass_change_mail . '... end of your message');
0
WebElaine