register_urlフィルターフックでユーザー登録フォームのURLを国際化する

メタ情報の[登録]リンクを多言語化引数付きのURLに変更する

メタ情報の場所

メタ情報のHTMLは、

wp-includes/default-widgets.php

内に記述されている。

そして、[登録]リンクは、wp_register()という関数でリンクが出力されるようになっている。その関数は、

wp-includes/general-template.php

のwp_registration_url()に書かれており、フィルターフックが設定されているため出力されるデータを開発者がカスタマイズ可能な状態になっている(wordpress3.8で確認)。

カスタマイズ方法

多言語化対応に伴い、特定のサブドメインである、

  • en
  • es
  • ja

などの国別のサブドメインの場合には、専用のユーザー登録フォームへのリンクにカスタムする。その具体的な方法が以下の例になる。

function dev_wplang()
{
	add_filter( 'register_url', array($this, 'new_regist_url') ); //フィルターにフック
}

function new_regist_url( $register_url ) // URLで言語を判定し、リンクを書き換える内容を設定しreturn
{
	if( strpos($_SERVER['HTTP_HOST'], 'en.') !== false )
	{
	    $register_url = network_site_url('/wp-signup.php?lang=en_US&lc=America/New_York&sid=1234');
	    return $register_url;	
	}

	if( strpos($_SERVER['HTTP_HOST'], 'es.') !== false )
	{
	    $register_url = network_site_url('/wp-signup.php?lang=es_ES&lc=Europe/Madrid&sid=5678');
	    return $register_url;	
	}
	
	else
	{
             //日本の場合
	}
}

wordpressマルチサイトのルートドメインは、

network_site_url

という関数で取得できる。

多言語化のためのGET引数

上記のURL設定は不特定多数の人が閲覧することになるユーザー登録フォームを多言語化するために必要な設定になる。通常は、

test.com/wp-signup.php

という登録フォームにリダイレクトされるのだが、国際化するために

test.com/wp-signup.php?lang=en_US&lc=America/New_York&sid=1234

という引数付のURLにカスタムしている。GET引数は、

  • lang
  • lc
  • sid

の3つで、langの値でwordpressデータベースを参照・更新することなく言語の切り替えを行うことができる。localeフィルターフックでブログ開設画面の翻訳を行う方法にエントリーしたので参考にしてほしい。

lcは地域を設定するためのデータで、ユーザー登録とブログ登録のセットアッププロセスが終了する際にlangと一緒にデータベースをアップデートする値になる。

3つ目のsidは、ユーザー登録時に発生する画面遷移とブラウザのリダイレクト対策目的のセッション維持IDになる。sidをキーにして設定言語を特定するために必要な引数になる。

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

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

register_urlフィルターフックでユーザー登録フォームのURLを国際化するの記事にコメントを投稿