マルチサイト構成のサブドメイン設定でバリデーションの条件を変更

wordpress mu環境のブログ登録画面で文字数制限の調整とハイフンの入力を可にする

コアファイルをいじって素早く一時的なカスタマイズを行う

wordpressのマルチサイトでは、ユーザーがブログの開設を行うことができるようになっている。画面遷移は、

ユーザー登録 → ブログの登録

という遷移になっていて、実際には画像のような画面になっている。

wp-blog-register

この画面では、サブドメインとブログのタイトルを入力できるのだが、サブドメインのバリデーション条件を緩くするためその方法を調べてみた。

標準のサブドメイン名のバリデーション設定は、

4文字以上の英数字のみ

となっている。実際には数字のみのサブドメインもNGとなるようにコードが組まれている。

この条件を

2文字以上の英数字とハイフンのみ

というバリデート条件にカスタマイズしてみる。

サブドメインのvalidationはwpmu_validate_blog_signupで行っている

wpmu_validate_blog_signupでマルチサイト構成時のブログ設定のvalidationは行われており公式ドキュメントは以下のURLを参照することで確認できる。

http://codex.wordpress.org/WPMU_Functions/wpmu_validate_blog_signup

wpmu_validate_blog_signupはwordpressコアのwp-includesディレクトリ内の

ms-functions.php

というファイルに書かれている。そのため、同ファイル内で[wpmu_validate_blog_signup]を検索すればその関数にたどり着ける。

変更箇所と変更内容は以下のとおり

文字数の調整

if ( strlen( $blogname ) < 2 && !is_super_admin() )
//if ( strlen( $blogname ) < 4 && !is_super_admin() )
	$errors->add('blogname',  __( 'Site name must be at least 4 characters.' ) );

ハイフンの許容

if ( preg_match( '/[^a-z0-9\-]+/', $blogname ) )
//if ( preg_match( '/[^a-z0-9]+/', $blogname ) )
	$errors->add('blogname', __( 'Only lowercase letters (a-z) and numbers are allowed.' ) );

このカスタマイズはコアファイルを調整しているのでおすすめできるカスタマイズ方法ではない。推奨できるカスタマイズ方法ではないが、バリデーションの条件を一時的に変更する場合にはおぼえておきたいノウハウとなる。

実際のところ、wordpressのhookを使って上記のバリデーション条件のカスタマイズは不可能と判断した。その理由として、エラーメッセージにバリデート条件がハードコードされており、バリデート値もソースコードに直接記述されて点を根拠とした。

なお、ユーザー名のバリデーションは、

wpmu_validate_user_signup

で行われており、以下の部分を調整することで4文字よりも短いユーザー名を設定可能となる。wpmu_validate_blog_signupと同様にwordpressコアのwp-includesフォルダ内のms-functions.phpに記述されている。

if ( strlen( $user_name ) < 4 )
	$errors->add('user_name',  __( 'Username must be at least 4 characters.' ) );

サブドメイン名の文字数制限カスタマイズが必要になった理由

最後に条件を変更する必要が生じた理由を書いてみようと思う。

wordpressのマルチサイト構成で国際化(多言語化)を行う場合に、各言語サイトをサブドメインで構成しようとした場合に4文字のサブドメインは厳しい条件となる。

ja.test.com
en.test.com

といったドメインを設定したいからというのがその理由となる。

test.com

をマルチサイトのルートとして、wordpress内部でjaやenの場合に条件を分岐する方法もあるのかもしれないが、それよりもバリデーションの条件を一時変更して上のような短いドメインを設定後コアライブラリに行った変更を元に戻すという方法のほうがシンプルに対応できる。

en-us.test.com
en-gb.test.com

といったドメインも設定できてもよいと考えている。

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

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

マルチサイト構成のサブドメイン設定でバリデーションの条件を変更の記事にコメントを投稿

Web開発