
WordPressでどのようにして自動返信メールなどが送られるのかを調べました。
自動返信メールや有効化メールをカスタマイズする必要があったため、WordPressがどのようにメールを送信しているのかを調べました。
今回は、エンドユーザーがマルチサイト(ネットワーク)でユーザ登録(ブログ作成ではなく)をした時に動いている2つの関連する関数について調べました。
関数が書かれているファイルは、wp-includes/ms-functions.phpです。
wpmu_signup_user($user, $user_email, $meta = ”)
wp-signup.phpの中で、ユーザ登録時に使われる関数です。
具体的には、
- ユーザが入力した情報を実際にデータベースに入力すること
- ユーザのメールアドレス宛に、有効化メールを送信する
という2つの仕事をしています。
function wpmu_signup_user($user, $user_email, $meta = '') {
global $wpdb;
// Format data
$user = preg_replace( '/\s+/', '', sanitize_user( $user, true ) );
$user_email = sanitize_email( $user_email );
$key = substr( md5( time() . rand() . $user_email ), 0, 16 );
$meta = serialize($meta);
$wpdb->insert( $wpdb->signups, array(
'domain' => '',
'path' => '',
'title' => '',
'user_login' => $user,
'user_email' => $user_email,
'registered' => current_time('mysql', true),
'activation_key' => $key,
'meta' => $meta
) );
wpmu_signup_user_notification($user, $user_email, $key, $meta);
}
引数として、$user(ユーザ名)、$user_email(ユーザーのメールアドレス)、$meta = ”(その他の情報、デフォルトでは何も無し)を受け取ります。
global $wpdbはデータベースに接続する時に使うグローバル変数です。(関数リファレンス/wpdb Class)
// Format dataから始まる数行では、ユーザが入力した情報を変形して無害化したり、パスワードを生成してmd5というという関数を使って暗号化したり、その他の情報をDBに格納するための形に直したり(Serialize)しています。
$wpdb->insert( $wpdb->signups, array(から始まるところでは、実際にDBにデータを格納しています。格納先は、wp_signupsです。domainなどが空いているのは、ブログ作成のフローでは、この次のページで埋めるからです。
最後に、wpmu_signup_user_notification($user, $user_email, $key, $meta);で、メールを送信しています。これを次に見ます。
wpmu_signup_user_notification($user, $user_email, $key, $meta);
ユーザへのメールを送るところです。
function wpmu_signup_user_notification($user, $user_email, $key, $meta = '') {
if ( !apply_filters('wpmu_signup_user_notification', $user, $user_email, $key, $meta) )
return false;
// Send email with activation link.
$admin_email = get_site_option( 'admin_email' );
if ( $admin_email == '' )
$admin_email = 'support@' . $_SERVER['SERVER_NAME'];
$from_name = get_site_option( 'site_name' ) == '' ? 'WordPress' : esc_html( get_site_option( 'site_name' ) );
$message_headers = "From: \"{$from_name}\" <{$admin_email}>\n" . "Content-Type: text/plain; charset=\"" . get_option('blog_charset') . "\"\n";
$message = sprintf(
apply_filters( 'wpmu_signup_user_notification_email',
__( "To activate your user, please click the following link:\n\n%s\n\nAfter you activate, you will receive *another email* with your login.\n\n" ),
$user, $user_email, $key, $meta
),
site_url( "wp-activate.php?key=$key" )
);
// TODO: Don't hard code activation link.
$subject = sprintf(
apply_filters( 'wpmu_signup_user_notification_subject',
__( '[%1$s] Activate %2$s' ),
$user, $user_email, $key, $meta
),
$from_name,
$user
);
wp_mail($user_email, $subject, $message, $message_headers);
return true;
}
引数として、$user, $user_email, $key, $meta = ”で、ID/メール/さっき生成したアクティベーションキー、その他のメタ情報を渡します。
一番最後に、wp_mail($user_email, $subject, $message, $message_headers);がありますが、これがWordPressがメールを送る時の関数で、メールアドレス、タイトル、本文、ヘッダーを渡すとメールを送信してくれるようです。
この関数に渡すための中身を揃える作業がその中間です。