WordPressから送信されるメールのカスタマイズ備忘録

WordPressから送信されるメールのカスタマイズ備忘録

WordPressでユーザー登録・メールアドレス変更・パスワード変更などを行った際に管理者やユーザー宛に送信されるメールを任意の内容にカスタマイズする方法の備忘録です。
この辺をいじる頻度が低いのもあって対応方法を忘れていたり、以前はプラグイン化して対応する必要があったものがフックで可能になっていたりしたので、簡単にですがひと通りのカスタマイズ方法をまとめました。

※以下の内容はいずれも WordPress Ver 5.2.2 で検証したものになります。

WordPressから送信されるメールのカスタマイズ備忘録 目次

  1. 送信者名と送信者メールアドレスを変更する
  2. メール送信を停止
  3. ユーザー登録時の管理メールアドレス宛メール
  4. ユーザー登録時の登録ユーザー宛メール
  5. メールアドレス変更時の該当ユーザー宛メール
  6. パスワード変更時の該当ユーザー宛メール
  7. パスワードリセット時のユーザー宛メール
  8. パスワードリセット時の管理メールアドレス宛メール

1. 送信者名と送信者メールアドレスを変更する

デフォルトでは送信者名と送信者メールアドレスに「WordPress」と入りますが、とりあえずこれらを変更するだけであればfunctions.phpに下記を記述することでそれぞれ任意のものに変更できます。

functions.php

// 送信者名を変更
add_filter( 'wp_mail_from_name', function( $email_from ) {
  return 'Lorem ipsum';
});

// 送信者メールアドレスを変更
add_filter( 'wp_mail_from', function( $email_address ) {
  return 'mail@example.com';
});

上記をそのまま記述後に送信されてきたメールを確認すると、送信者名が「Lorem ipsum」に、送信者メールアドレスが「mail@example.com」に変更されているのを確認できます。

目次へ

2. メール送信を停止

そもそもメール送信自体が必要がないという場合は、functions.phpに下記を記述することでそれぞれ停止できます。

functions.php

// ユーザー登録時の管理メールアドレス宛メール送信停止
add_filter( 'wp_new_user_notification_email_admin', '__return_false' );

// ユーザー登録時の登録ユーザー宛メール送信停止
add_filter( 'wp_new_user_notification_email', '__return_false' );

// メールアドレス変更時のメール送信停止
add_filter( 'send_email_change_email', '__return_false' );

// パスワード変更時のメール送信停止
add_filter( 'send_password_change_email', '__return_false' );

// パスワードリセット時のメール送信停止
add_filter( 'wp_password_change_notification_email', '__return_false' );

目次へ

3. ユーザー登録時の管理メールアドレス宛メール

新規ユーザーが登録された際に管理メールアドレス(「一般設定」で設定するメールアドレス)宛に送信されるメールをカスタマイズしたい場合は、wp_new_user_notification_email_admin()を利用してfunctions.phpへ下記のように記述します。

functions.php

add_filter( 'wp_new_user_notification_email_admin', 'custom_new_user_notification_email_admin', 10, 3 );
function custom_new_user_notification_email_admin( $wp_new_user_notification_email, $user, $blogname ) {
  $subject = '【' . $blogname . '】 新規ユーザー登録';
  $message = 'これはユーザー登録時に管理メールアドレス宛に送信されます。';

  $wp_new_user_notification_email['subject'] = $subject;
  $wp_new_user_notification_email['message'] = $message;
  return $wp_new_user_notification_email;
}

サイト名はサンプルにもあるように$blognameで取得でき、ユーザー情報に関するものを取得・表示したい場合は$userを利用します。
また、このサンプルでは件名と本文を変更するために'subject''message'を利用していますが、'to''headers'も用意されています。

目次へ

4. ユーザー登録時の登録ユーザー宛メール

新規ユーザーが登録された際にその登録ユーザー宛に送信されるメールをカスタマイズしたい場合は、wp_new_user_notification_email()を利用してfunctions.phpへ下記のように記述します。

functions.php

add_filter( 'wp_new_user_notification_email', 'custom_new_user_notification_email', 10, 3 );
function custom_new_user_notification_email( $wp_new_user_notification_email, $user, $blogname ) {
  $subject = '【' . $blogname . '】 新規ユーザー登録';
  $message = 'これはユーザー登録時に登録ユーザー宛に送信されます。';

  $wp_new_user_notification_email['subject'] = $subject;
  $wp_new_user_notification_email['message'] = $message;
  return $wp_new_user_notification_email;
}

こちらも先ほど同じく'subject''message'だけでなく'to''headers'も用意されています。

目次へ

5. メールアドレス変更時の該当ユーザー宛メール

ユーザーのメールアドレス変更を通知するメール(変更前のメールアドレス宛に送信されます)をカスタマイズしたい場合は、email_change_email()を利用してfunctions.phpへ下記のように記述します。

functions.php

add_filter( 'email_change_email', 'custom_email_change_email' );
function custom_email_change_email( $email_change_email ) {
  $subject = '【' . get_option( 'blogname' ) . '】 メールアドレス変更';
  $message = '###USERNAME### さんのメールアドレスが ###NEW_EMAIL### に変更されました。' . "\n";
  $message .= 'これはメールアドレス変更時に該当ユーザーの変更前メールアドレス宛に送信されます。';

  $email_change_email['subject'] = $subject;
  $email_change_email['message'] = $message;
  return $email_change_email;
}

これには'message'部分で使える特別な文字列がいくつか用意されており、例えばサンプルにあるように###USERNAME###と記述すれば自動でユーザー名が出力され、###NEW_EMAIL###と記述すれば自動で新しく設定したメールアドレスが出力されたりと、サイト情報やユーザー情報といった使用頻度が高いものを楽に表示させることができます。
使用できる文字列は###ADMIN_EMAIL######SITEURL###など他にも用意されており、フックの詳細含めてそれらは以下で確認できます。

目次へ

6. パスワード変更時の該当ユーザー宛メール

ユーザーのパスワード変更を通知するメールをカスタマイズしたい場合は、password_change_email()を利用してfunctions.phpへ下記のように記述します。

functions.php

add_filter( 'password_change_email', 'custom_password_change_email' );
function custom_password_change_email( $pass_change_email ) {
  $subject = '【' . get_option( 'blogname' ) . '】 パスワード変更';
  $message = '###USERNAME### さんのパスワードが変更されました。' . "\n";
  $message .= 'これはパスワード変更時に該当ユーザーのメールアドレス宛に送信されます。';

  $pass_change_email['subject'] = $subject;
  $pass_change_email['message'] = $message;
  return $pass_change_email;
}

こちらも'message'部分で###USERNAME######EMAIL###といった特別な文字列を使用できます。

目次へ

7. パスワードリセット時のユーザー宛メール

パスワードのリセット要求した際に送られてくるメールをカスタマイズしたい場合は、2つのフックを使用してfunctions.phpへ下記のように記述します。

functions.php

add_filter( 'retrieve_password_title', 'custom_retrieve_password_title', 10, 3 );
function custom_retrieve_password_title( $title, $user_login, $user_data ) {
  $title = '【' . get_option( 'blogname' ) . '】 パスワードリセット';
  return $title;
}

add_filter( 'retrieve_password_message', 'custom_retrieve_password_message', 10, 4 );
function custom_retrieve_password_message( $message, $key, $user_login, $user_data ) {
  $message = 'これはパスワードリセット時に該当ユーザーのメールアドレス宛に送信されます。' . "\n";
  $message .= 'リセットURL: <' . network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user_login ), 'login' ) . '>';
  return $message;
}

こちらの場合は他のフックとは違い、件名を変更したい場合はretrieve_password_title()を、本文を変更したい場合はretrieve_password_message()をそれぞれ使用してカスタマイズします。
パスワードをリセットするためのページURLについては、サンプルにあるように$key$user_loginを組み合わせて出力できます。

目次へ

8. パスワードリセット時の管理メールアドレス宛メール

ユーザーがパスワードをリセットした際に管理メールアドレス宛に送信されるメールをカスタマイズしたい場合は、wp_password_change_notification_email()を利用してfunctions.phpへ下記のように記述します。

functions.php

add_filter( 'wp_password_change_notification_email', 'custom_password_change_notification_email', 10, 3 );
function custom_password_change_notification_email( $wp_password_change_notification_email, $user, $blogname ) {
  $subject = '【' . get_option( 'blogname' ) . '】 パスワードリセット';
  $message = $user->user_login . ' さんのパスワードがリセットされました。' . "\n";
  $message .= 'これはユーザーのパスワードリセット時に管理メールアドレス宛に送信されます。';

  $wp_password_change_notification_email['subject'] = $subject;
  $wp_password_change_notification_email['message'] = $message;
  return $wp_password_change_notification_email;
}

サンプルにある'subject''message'だけでなく、'to''headers'も用意されています。

目次へ

Close the search window,
please press close button or esc key.