はじめに
WordPressのマルチサイト上に会員サイトを作ることになりました。
会員サイトというのは一般ユーザーが会員登録するサイトで、ログインしたりマイページで何か機能があったり、会員限定ページを見れたりするやつですね。
WordPressでユーザー登録する場合は、管理者ユーザーではなく、購読者ユーザーとかのタイプで登録することになります。権限を分けているからもちろん管理画面に入れないですが、一旦権限が変えられてしまったら管理者になれるような層の、ユーザー情報になりますね。
マルチサイトというのは、WordPressで複数のサイトを並行して運用できる管理方法です。下記のようなURLになります。
http://main-site.com/
http://main-site.com/sub1/
WordPressをがっつりシステム組み込む感じで使ったことがなかったんですが、今回やってて上記のようなことがわかりました。
Theme My Loginの特徴
会員サイトを作るのにTheme My Loginというプラグインを試しました。
特徴としては、下記のようなところになります。
・テンプレートを自分のテーマ画面にコピーして使えるので、見た目をカスタマイズしやすい。
・設定ページがちょっとシステム寄りというか、わかりにくい。
マルチサイトだとUser Moderationができない。
Theme My LoginにはUser Moderationという機能があります。
http://www.jfarthing.com/development/theme-my-login/user-moderation/
会員仮登録後の本登録方法を、None:認証なし、E-mail:メール認証、Admin:管理者承認制の3タイプから選べるみたいですね。
しかしこれがマルチサイトだと選べない。
「Enable User Moderation」にチェックを入れて保存しようとすると、
「User Moderation is not currently compatible with multisite.」となります。
この、UserModerationしない段階で会員登録すると、「あなたのユーザー名はXXXで登録されました!」みたいな画面になりますが、まだ本登録ではなくて、送られたメールをクリックしたら本登録のようです。
つまりデフォルトはメール認証です。
マルチサイトだとデフォルトから項目追加ができない
会員登録ページは、Theme My Loginデフォルトの項目がこんな感じです。
ユーザー名、メールアドレス、パスワード2回ですね。
ここに項目追加ができないのですよ。このままだとこれ以外の項目が、本登録後の会員情報編集でしか取れなくなりますよね。
単純にテキストボックスを追加しても登録されません。
たぶん私がわからなかっただけかと思いますが、やりかたが分からなかったです。
バリデーションの追加は出来ました。
function tml_registration_errors( $obj ) {
//
// ここで、$_POST値を元に追加のバリデーションを行う
// $errors["xx"] = "yy";
$obj['errors'] = $errors;
return $obj;
}
add_filter( 'wpmu_validate_user_signup', 'tml_registration_errors' );
「(マルチサイト)サインアップ時のバリデーション追加」はできたのですが、「(マルチサイト)サインアップ時の登録処理追加」ができなかったんですよね。。
DBを見ると、
サインアップ時→sineupテーブルにデータ登録
本登録時→users & user_metaテーブルにデータ登録しているようです。
sineupテーブルのmetaカラムに、パスワードはシリアライズで入っているんで、ここに入れるみたいなんですが。
どのフックを使えばいいかというのはこの辺にあります。
http://wpdocs.osdn.jp/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3_API/%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%83%83%E3%82%AF%E4%B8%80%E8%A6%A7#.E7.AE.A1.E7.90.86.E7.94.BB.E9.9D.A2.E9.96.A2.E9.80.A3.E3.81.AE.E3.82.A2.E3.82.AF.E3.82.B7.E3.83.A7.E3.83.B3
これ見てもわからないですね。マルチサイトの情報少ないし。
大体ユーザー登録というのがメインは管理ユーザー用のものなので、使いやすくするのは別次元に分けたほうがいいのではと思います(新しくmemberテーブルで管理するとか)
テンプレートファイル名がわかりにくい
あとは細かい話ですが、Theme My Loginのテンプレートファイル名は、こんな感じであります。
これを自分のテーマディレクトリに置いたら、固定ページを作ってくれるんです。ちょっとファイル名の前に「tml-」とか付けてほしいなと思いますね。ただでさえテーマディレクトリってごちゃごちゃしてるんで。
リンク
Theme My Login公式ページ
https://wordpress.org/plugins/theme-my-login/
Theme My Login使用の際は下記を参考にさせていただきました。
使い方の日本語解説はバッチリです。
http://yahss.net/wordpress/765-registration-form2-with-theme-my-login/
http://qiita.com/hiroki_y/items/7ca0a2a364eb9edabe39