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がメールを送る時の関数で、メールアドレス、タイトル、本文、ヘッダーを渡すとメールを送信してくれるようです。
この関数に渡すための中身を揃える作業がその中間です。