Theme My Loginには、プロフィールを更新した時にメールを送る機能が無いようです。その機能を実装してみます。
profile_update フックを利用し、処理を追加しています。
/* functions.php */ function my_user_update_notice($user_id){ // ユーザー $send_to = $_POST['email']; // 各種変数 $obj = array( 'url' => get_bloginfo('url'), 'name' => get_bloginfo('name'), 'date' => date_i18n('Y年m月d日 H時i分'), 'last_name' => $_POST['last_name'], 'first_name' => $_POST['first_name'] ); /* メールタイトル */ $subject = '【テストサイト名】会員情報が更新されました'; /* メール本文 EOF内はインデントNG */ $message = <<< EOF {$obj['last_name']} {$obj['first_name']} さんのプロフィールが更新されましたのでお知らせ致します。 更新日:{$obj['date']} =================================== このメールは {$obj['name']}({$obj['url']})から送信されました。 EOF; wp_mail( $send_to, $subject, $message, 'From:WPテストサイト <no-reply@gmail.com>'); } add_action('profile_update', 'my_user_update_notice', 20);
更新処理が完了してからメールを送信するため、処理の優先度は低めに設定します。
とりあえずこれで、更新時に通知させることができるようになりました。
メールの本文を変更する際、毎度テーマファイルを変更するのは危険なので、管理画面からメール本文を変更できるようにしてみます。
まず、管理画面に入力枠を作成してみます。
(PHPの囲みを一度閉じてHTMLを記述していますので注意)
/* functions.php */ <?php ・・・ ・・・ ・・・ /* 管理画面にページ追加 */ function add_menu() { add_menu_page('更新通知メール', '更新通知メール', 'level_7', 'set_update_mail', 'set_update_mail'); add_action('admin_init', 'register_set_update_mail_settings'); } /* 手動入力させたい項目の設定 */ function register_set_update_mail_settings() { // タイトル register_setting( 'set_update_mail-group', 'mail-title' ); // 本文 register_setting( 'set_update_mail-group', 'mail-body' ); // from名 register_setting( 'set_update_mail-group', 'mail-from-name' ); // fromアドレス register_setting( 'set_update_mail-group', 'mail-from-address' ); } /* 管理画面のHTML作成 */ function set_update_mail() { ?> <h2>プロフィール更新通知メール</h2></h2> <form method="post" action="options.php"> <?php settings_fields( 'set_update_mail-group' ); do_settings_sections( 'set_update_mail-group' ); ?> <label for="mail-from-name">From 名前</label><br> <input type="text" id="mail-from-name" class="regular-text" name="mail-from-name" value="<?php echo esc_attr(get_option('mail-from-name')); ?>"><br> <label for="mail-from-address">From アドレス</label><br> <input type="text" id="mail-from-address" class="regular-text" name="mail-from-address" value="<?php echo esc_attr(get_option('mail-from-address')); ?>"><br> <label for="mail-title">メールタイトル</label><br> <input type="text" id="mail-title" class="regular-text" name="mail-title" value="<?php echo esc_attr(get_option('mail-title')); ?>"><br> <label for="mail-body">メール本文</label><br> <textarea id="mail-body" name="mail-body" style="width:500px;height:300px;"><?php echo esc_attr(get_option('mail-body')); ?></textarea><br> <?php submit_button(); ?> </form> <?php } add_action('admin_menu', 'add_menu'); ・・・ ・・・ ・・・
今回設定しているパラメータは下記の4つです。
settings_fields、do_settings_sections で作成したグループ名を指定し、フォームのポストボタンは submit_button() を書くだけでOKです。
下記のような画面が作成され、「変更を保存」を押してテキストが保存されていれば、管理画面は完成です。
次に、先述の my_user_update_notice 関数を変更し、管理画面から入力された内容を取得できるようにしてみます。
/* functions.php */ function my_user_update_notice($user_id){ // ユーザー $send_to = $_POST['email']; /* メールタイトル */ $subject = get_option('mail-title'); /* メール本文 */ $message = get_option('mail-body'); wp_mail( $send_to, $subject, $message, 'From:'.get_option('mail-from-name').'<' . get_option('mail-from-address') .'>'); } add_action('profile_update', 'my_user_update_notice', 20);
管理画面で入力された値の取得は get_option で行います。
これで、管理画面からメール本文が設定できるようになりました。
これだとメール本文が固定になるため、動的な項目を入れられるようにしてみます。
今回は、本文内に下記のようなパラメータを入れられるようにしてみます。
/* functions.php */ function my_user_update_notice($user_id){ // ユーザー $send_to = $_POST['email']; /* メールタイトル */ $subject = get_option('mail-title'); /* メール本文 */ /* 置換変数 */ $obj = array( '%site_url%' => get_bloginfo('url'), '%site_name%' => get_bloginfo('name'), '%update_date%' => date_i18n('Y年m月d日 H時i分'), '%last_name%' => $_POST['last_name'], '%first_name%' => $_POST['first_name'] ); $search = array_keys( $obj ); $replace = array_values( $obj ); $message = str_replace( $search, $replace, get_option('mail-body') ); wp_mail( $send_to, $subject, $message, 'From:'.get_option('mail-from-name').'<' . get_option('mail-from-address') .'>'); } add_action('profile_update', 'my_user_update_notice', 20);
単に%で囲われた箇所を置換しているだけの処理ですね。
これで本文内に、任意の場所に動的な項目を入れられるようになりました。
利用できるパラメータの説明文を追加して、完成です。