MoyaSystem

もやしです。

BuddyPressのユーザ登録時メール本文を変えたいのだが

無理じゃね?という話。

やりたいこと

BuddyPressでユーザ登録をさせると、こんな文面のメールが飛んでくる。

Thanks for registering! To complete the activation of your account please click the following link:

これがGmail等の迷惑メールフィルタリングに引っかかってしまうため、うまいこと本文を変えてやりたい。BuddyPress本体のソースは触らず、カスタマイズでなんとかできないものか。

調べてみた

このメール本文がどこに定義されているのかを調べてみた。
Grepした結果、buddypress->bp-core->bp-core-filters.php の bp_core_activation_signup_user_notification関数、
buddypress->bp-members->bp-members-functions.php の bp_core_signup_send_validation_email 関数の2箇所に本文がベタ書きで埋め込まれていた。
bp_core_activation_signup_user_notification関数の方は

add_filter( 'wpmu_signup_user_notification', 'bp_core_activation_signup_user_notification', 1, 4 );

でコールされていたので、functions.phpに以下のようなコードを書いて試してみた。

<?php
/**
 * bp_core_activation_signup_user_notificationのメッセージだけを変えた関数
 */
function fc_core_activation_signup_user_notification( $user, $user_email, $key, $meta ) {
        /*
         * 略
         */
	// customized message
	$message  = sprintf( __( "TexChangeにご登録ありがとうございます!アカウントを有効化するにはこちらのリンクをクリックしてください。:\n\n%1\$s\n\n", 'buddypress' ), $activate_url );
        /*
         * 略
         */
}

remove_filter( 'wpmu_signup_user_notification', 'bp_core_activation_signup_user_notification', 1, 4 );
add_filter( 'wpmu_signup_user_notification', 'fc_core_activation_signup_user_notification', 1, 4 );
?>

しかしこれでメッセージ送信を確認しても本文が置き換わらず。ということでbp_core_signup_send_validation_email 関数をなんとかしてやらなきゃダメ。

ところがどっこい

bp_core_signup_send_validation_email 関数は bp_core_signup_user 関数という結構大きな関数の中で直接呼ばれており、bp_core_signup_user もまた bp_core_screen_signup 関数なるもっと大きな関数でコールされており……と一筋縄ではカスタマイズできなくなっている。こりゃ困った。

BuddyPressのフォーラムでも類似の質問が上がっているが、coreファイルをいじっちゃいましたとか、メールの本文を変えずにレイアウトだけ変えるプラグインが紹介されたりとエレガントな解答が無い模様。*1
あまりこれに工数かけ過ぎるのも良くないので「迷惑メールにいってないか確認してね」で逃げるしか無いのかなぁ。いずれ多言語にカスタマイズできる仕様にしていただきたいものです。

*1:http://buddypress.org/support/topic/cant-change-activation-email/