add_signup_metaでブログの補足情報を登録する方法

wordpressでサインアップ時に独自の値を設定する

signupとactivation

wordpressのマルチサイト機能を利用してブログサービスを開発しようとしている。

多言語対応のブログサービスにしたいので、ユーザー登録(ブログセットアップ)時にユーザー固有の言語情報を扱う必要がある。ユーザー登録は複数の画面で状態を維持しながら進行していくためsessionを利用して対応する予定であったが、アクティベーション時にルートドメインから個別のサブドメインURLへのリダイレクト処理が入るため、以下の要素を分けて考えることにした。

  • signup
  • activation

wordpressのユーザー登録は上の二つの要素をクリアすることで完了する。

当初、signup → activation間でsessionを維持する方向で検討していたが、signup時にユーザー毎のメタ情報を追加する方法があったので、そのメタデータ内で言語情報を扱いデータを永続化することにした。データを永続化した上で後にユーザーがactivationする方法になる。この方法の場合

signup → activation

の間でセッションを維持する必要がない。

add_signup_meta filter

ユーザーのサインアップ処理が行われると

wp_signups

というテーブルにユーザー情報が格納される。その後、ユーザーがアクティベーション処理を行うことでデータが有効になるのだが、このテーブルにmetaデータが格納されていて、標準では、

  • lang_id
  • public

という2つをkeyとする配列がシリアライズされた状態で保存されている。このmeta情報の中にsignup時に開発者が任意のデータを追加することができ、そのためのフィルターフックが、

add_signup_meta

になる。

ちなみに、lang_idというkeyは標準で1が設定されるようになっているのだが、このデータがwordpress内部で言語情報と関連しているかは不明である。webで検索してみたが、lang_idが1の場合はen_USで2だとes_ESということにはなっていないようだ。また、publicについては、検索エンジンのrobot制御に利用されている。

signupメタデータ追加方法

プラグイン内のconstructで以下のようにしてフィルターフックを定義する。

add_filter('add_signup_meta', array($this, 'signup_meta_lang') );

signup_meta_langという独自関数でメタデータに任意の言語情報を追加するコードを書く。

function signup_meta_lang( $meta )
{
	if( $_SESSION['WPLANG'] )
	{
		$meta['language'] = $_SESSION['WPLANG'];
	}

	return $meta;
}

上の方法でlanguageというkeyで新しいメタデータが追加される。

add_signup_metaは、データベーステーブルにデータを格納する直前にフックされているため、signup_meta_langのタイミングで任意のデータを格納することができる。

そして、メタデータとして登録した情報は、アクティベーション後に

wp_n_options

内でデータが永続化されることになっている。そのため、アクティベーション後は

$language = get_options('language');

という感じで任意に設定したデータにアクセスすることが可能となる。

ユーザー登録やブログの登録を独自のスキームにカスタマイズする際には有効な方法である。

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

add_signup_metaでブログの補足情報を登録する方法の記事にコメントを投稿

Web開発