エラーテキスト、バリデーションの変更編までで、ひと通り登録の機能を作りました。
Theme My Loginには、プロフィールを更新した時にメールを送る機能が無いようで、その機能を実装してみます。
元記事
下記エントリの転載になります。
WordPressで会員制サイトを構築してみよう(プロフィール更新時にメール通知)
更新時にメールを送る処理
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);
profile_update フックを利用し、処理を追加しています。
更新処理が完了してからメールを送信するため、処理の優先度は低めに設定します。
これで、更新時に通知させることができるようになりました。
メールタイトル、本文などの情報を管理画面から入力させる
メールの本文を変更する際、毎度テーマファイルを変更するのは危険なので、管理画面からメール本文を変更できるようにしてみます。
まず、管理画面に入力枠を作成してみます。
(PHPの囲みを一度閉じてHTMLを記述していますので注意)
<?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>
<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つです。
- mail-title:メールタイトル
- mail-body:メール本文
- mail-from-name:from名前
- mail-from-address:fromアドレス
settings_fields、do_settings_sections で作成したグループ名を指定し、フォームのポストボタンは submit_button() を書くだけでOKです。
下記のような画面が作成され、「変更を保存」を押してテキストが保存されていれば、管理画面は完成です。
次に、先述の my_user_update_notice 関数を変更し、管理画面から入力された内容を取得できるようにしてみます。
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 で行います。
これで、管理画面からメール本文が設定できるようになりました。
メールの本文内に、動的な項目を入れる
これだとメール本文が固定になるため、動的な項目を入れられるようにしてみます。
今回は、本文内に下記のようなパラメータを入れられるようにしてみます。
%last_name% ・・・ ユーザーの姓
%first_name% ・・・ ユーザーの名
%update_date% ・・・ 更新日時
%site_name% ・・・ ブログ名
%site_url% ・・・ ブログURL
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);
単に%で囲われた箇所を置換しているだけの処理です。
これで本文内に、任意の場所に動的な項目を入れられるようになりました。
利用できるパラメータの説明文を追加して、完成です。