ユーザ登録の有効化メールが送られる仕組みを調べました。

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

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

著者について

目次
閉じる