先日、WordPressで簡単に会員制サイトを制作できるプラグイン WP LOYALTY を公開しました。
より機能を充実させるためのアドオンも順次公開予定ですが、ここでは、1から会員制投稿サイトを開発するためのポイントをご紹介します。
会員制投稿サイトに必要な機能
会員制投稿サイトを作成する上で、最低限必要なのは以下の機能でしょう。
・会員登録フォーム
・ログインフォーム
・投稿フォーム
他にも
・ログアウト
・パスワードリマインダー
・プロフィール編集
なども欲しいところです。
WordPressのデフォルトの(つまり管理者が使うものとほぼ同じ)ログインフォームや投稿フォーム、プロフィール画面を使えばかなり容易に実装可能ですが、見栄えもセキュリティ上も好ましくありません。
ここでは、会員登録フォームも投稿フォームも、独自に用意するものとし、また会員にはWordPressの管理画面を見せないように実装します。
会員データの管理方法
会員データの管理は、管理者と同じWordPressの「ユーザー」(つまり wp_usersテーブル)を使うのが簡単です。
管理者と一般会員ユーザーを同一テーブルで扱うことに抵抗のある方もいるかもしれませんが、認証機構やデータの入出力等を全て1から実装するとなると、WordPressを利用するメリットが小さくなりますね。
管理者と一般会員ユーザーは、権限グループ (role) によって区別します。
購読者 (subscriber) や寄稿者 (contributor) などの権限レベルの低い権限グループを用いるか、add_role() によって独自の権限を追加するのが良いでしょう。
今回は、寄稿者 (contributor) を使うこととします。
会員データのデータ設計
WordPressのログインは、デフォルトでは、ログインID (user_login) とパスワード (user_pass) で行います。
また、ユーザーデータにはメールアドレス (user_email) も必須です。
しかし、ユーザーに、登録メールアドレスとは別に、ログインIDを管理させるのは、どうにもイケてません。
メールアドレスとパスワードでさえよく忘れるのに、ログインIDなんて覚えてられない、というのは私だけではないはず。
ログイン時には、メールアドレスとパスワードでログインできる仕様が望ましいですね。
ではログインIDにメールアドレスと同じ値を入れれば良いかといえば、そうも行きません。
会員制サイトの登録メールアドレスは、通常、変更可能である必要があるでしょう。
しかし、WordPressのログインID (user_login) は基本的に変更不可です。
例えば aaa@example.com というメールアドレス(=ログインID)で登録した後、メールアドレスを bbb@example.com に変更した場合、ログインIDが aaa@example.com のままだとすると、
再度 aaa@example.com で登録しようとしたとき、メールアドレスは重複していないにも関わらず、ログインID重複で登録不可になってしまいます。
そこで、ログインID (user_login) は会員登録時に重複しないように自動生成しておき、
ログイン時には入力されたメールアドレスからログインIDを取得して、認証をかける仕組みにするのがベストです。
次回以降は、各機能の具体的な実装方法をご紹介していきます。