web-dev-qa-db-ja.com

Usermetaを「Eメール変更通知」Eメールメッセージに追加する方法

誰かが助けることができることを願っています。

Eメールアドレスを更新するときに受信するEメー​​ル内の「Eメール変更通知」テキストを変更しようとしています。

これが私のこれまでのところです。

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;

}

ご覧のとおり、私は電子メールメッセージを自分の姓と名でパーソナライズしたいと思います。これを行うための最善の方法は何だろう、そして誰もが私を始めてください例を私に提供することができるでしょう。

2
DigitalDesigner

ユーザーが e-mail アドレスを変更したときにユーザーに送信されるEメールを変更するために使用するフィルタはemail_change_emailです。これは元のコードで使用したpassword_change_emailとは異なることに注意してください。そのフィルタにより、 password が変更されたときにユーザーに送信される電子メールを変更できます。

これら2つのフィルタは同様に機能しますが、2つを区別することが重要です。両方のフィルタはwp-includes/user.phpにあります。

  • 以下のコードでは、メッセージテキストを変更するためにemail_change_emailを使用しています。以下のコード(およびドキュメント)に、新しいプレースホルダー###FIRST_NAME######LAST_NAME###が追加されました。

  • 文字列をハードコーディングする代わりに、メッセージテキスト内で可能な限り標準のプレースホルダ。

  • また、テキストドメインがカスタマイズされたメッセージテキストに追加されました。 gettext関数(__()_e()など)に渡される文字列にテキストドメインを追加することは常に良い習慣です。

/**
 * 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;
}

デバッグ

このコードではユーザーの姓名が出力されることを確認しました。この情報はユーザーのメタテーブルから来ていますが、コアによって$user配列を介して既に設定されています。個人情報は手動で**REMOVED**に置き換えました。

電子メールの例

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

これが$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] => 
)

上記の元のコードでデバッグ行が有効になったら、管理領域のコンソールに$user配列を表示する関数です。

/**
 * 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

あなたはすでにあなたの関数に$userオブジェクトを渡しているので、あなたは$user->first_name$user->last_nameを代用することができるはずです。

$new_message_txtを次のように変更するだけです。

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