会員しか見れないページをつくる

会員制のサイトを作ってみます。
これも function.php などをカスタマイズしてできないこともないですが、かなり面倒です。プラグインを使えば簡単に構築できてしまうので、プラグインでの作ってしまいましょう。

WP-Members

WP-Members はWordPressで会員制サイトをつくる際の定番プラグインです。
この他に theme my login というプラグインも人気がありますが、非会員ページを作る場合はPHPでカスタマイズする必要が出てきます。
できるだけ手を加える部分は少ないに越したことはないので、WP-Membersを使うことにします。

WP-Members のインストールと準備設定

これも管理画面の[プラグイン]でインストールして有効化します。

プラグインの追加画面では、“WP-Members: Membership Framework”という名前になっています。ダウンロードしたのは Version 3.0.4 でした。

管理画面の[設定]に[WP-Members]ができるので、そこで設定をおこないますが、その前にWP-Membersが推奨している設定変更をしておきます。

[設定]-[一般]の「メンバーシップ」で「だれでもユーザー登録ができるようにする」のチェックがはずれていることを確認します。

[設定]-[表示設定]の「RSS/Atom フィードでの各投稿の表示」で「抜粋のみを表示」を選択しておきます。

[設定]-[ディスカッション]の「他のコメント設定」の中の「ユーザー登録してログインしたユーザーのみコメントをつけられるようにする」にチェックをつけておきます。

設定

管理画面の[設定]-[WP-Members]を開きます。
一応日本語化はされているのですが、現状では WP-Membersが更新されているのに日本語化が追い付いていない状態です。英語表記のままになっているところがかなり残っています。

「WP-Membersオプション」「フィールド」「ダイアログ」「メール」という4つのタブがあります。
wp_members1最初の「WP-Membersオプション」の「Content」で、「Content Blocking」とあるのは、コンテンツに鍵をかけるということで、Posts と Pages にそれぞれ設定できるようになっています。原則禁止にしたいならチェックを入れます。そうすると、ログインしない限りは何も見ることができなくなってしまいます。そしたらログイン画面も見れなくなってしまうので、せめてそこだけは例外にしないといけないです(笑)。

今回の場合は原則誰でも見ることができて、一部の投稿記事に閲覧制限をかけたいと思います。ですから「Content Blocking」は両方共”Do not block”にしておきます。
あとサイトの性格によって、新規ユーザー登録の際、管理者の証人を必要とするとか、いろいろあります。

もう一つ、Show Excerpts というのがありますが、これは「抜粋を表示する」という意味です。

 

「フィールド」タブは会員登録する際に入力する項目の設定です。これもサイトの性格により違ってきますので、適当な項目を選んでください。登録しやすくするためには必要最小限に絞り込みます。今回は、名前とメールアドレス、パスワードだけにします。名前も任意にして、メールとパスワードだけを必須項目にします。
「Add a Field」を使えば、リストにない項目も追加できます。

「ダイアログ」では、会員登録時のエラーメッセージを登録します。
シチュエーションごとにメッセージを入力していきますが、日本語化されているので説明の必要はないでしょう。

「メール」タブでは、新規ユーザー(会員)登録時およびパスワード変更時に会員宛てに送るメールの設定をおこないます。

ページの作成

次の3つの固定ページを作成します。
(1) ログインページ
(2) 新規会員登録ページ
(3) 登録情報編集ページ

ログイン画面用ページ

これは固定ページでなくても、ウィジェットに納めることもできます。
タイトルはなんでもいいですが、仮に「メンバーログイン」としておきます。

本文に[wp-members page=login]と入力します。
これだけでユーザー名とパスワードの入力欄、ログイン状態を保存するためのチェックボックス、ログインボタンが配置されます。

固定ページを使う場合、[wp-members page=login]は、これだけだと、ユーザー名とパスワードの入力欄が目いっぱい広がって表示されてしまうので、CSS を使って調整します。

最低限これだけでいいのですが、ログインすると「ログアウト」の表示が「Click to log out」と英文のまま出てきます(バージョンによって異なるかもしれません)。翻訳漏れですが、AIMERS CREATEさんで日本語化ファイルの修正版が配布されていますのでこれをインストールすればいいでしょう。

このページは、自分自身にPOSTするよになっていますので、ログインすると同じページが再表示されます。
表示する内容は、WP-Members の方でログイン前と後で適切に変えてくれるので何もすることはありません。

ログイン後に誘導したいページがある場合そちらへのリンクを貼っておきたいのですが、単純に固定ページの本文内にリンクをつくるとログイン前にも表示されてしまいます。そこでログイン用のテンプレートを作成することにします。テンプレート内で、ログイン状態を調べ、ログインしていたらリンクボタンを表示するようにしました。

ログイン用の固定ページの slug が “login” なら、テンプレートは、page-login.php です。page.php を修正します。メインループが終了した後に次のコードを追加します(最初と最後の行は元からある行です)。

新規会員登録ページ

メンバーログインページに設置した、[wp-members page=login] で自動的にリンクが貼られます。
リンク先は[設定]-[WP-Members]の「オプション」タブの「固定ページ」の中の、「Register Page」で選択した固定ページです。選択していなければメンバーログインページに「新規ユーザー登録」のリンクはつくられません。
作成した新規会員登録ページには、[wp-members page="register"] のショートコードを貼りつけておきます。
それだけで[設定]-[WP-Members]の「フィールド」タブで設定した項目の入力欄がつくられます。

登録情報編集ページ

タイトルは仮に「マイページ」としておきます。
本文には [wp-members page="members-area"] と入力します。
これだけで登録情報の編集画面へのリンクとパスワードの変更画面へのリンクがつくられます。

WP-Members で登録したユーザーは、そのまま WoedPress のユーザーとして登録されます。
管理画面で、[ユーザー]を選択すると登録ユーザーの一覧が出て来るので確認できます。
権限は“購読者”です。

マイページにはログアウトのリンクも設置しておきます。
次のリンクを適当な場所におくだけです。

退会の処理

退会の場合は管理画面の[ユーザー]で削除することもできますが、利用者が自分で退会できるようにしたい場合は、別のプラグインを導入します。
Never Let Me Go というプラグインを使います。
インストールして有効化すると管理画面の[設定]に[退会設定]というメニューが追加されます。

マイページ機能

WP-Members で、誰でも見れるページとユーザー登録しないページに分けることができました。
会員と非会員で閲覧できるページを分けるといった用途に使えます。

ある記事を会員だけにしか見れないようにする

しかしWP-Membersの設定で、原則 「Do not block」にしてあるので、ここまでではログインできたというだけで、ログインしてもしなくてもアクセスできるコンテンツは同じです。

それで個別記事にロックをかけていきます。
ロック用のカスタムフィールドをつくります。

以前の記事でプラグインの Advanced Custom Fields を導入しているので、それを使います。

管理画面の[カスタムフィールド]で新規追加をします。
タイトルは任意ですが仮に「ロック」としておきます。
フィールドを1つ追加します。
フィールドラベルは、”ブロック” とでもしておきます。
フィールド名は “block” とします。
フィールドタイプは、”真/偽” を選びます。
デフォルト値は、ブロックするページが多いか少ないかで判断してください。
カスタム投稿タイプが「wordpress」の記事に鍵をかける場合は、「位置」のところのルールで「投稿タイプ」を選び、「wordpress」と「等しい」という選択にします。そうすると、wordpress の編集画面で、block というチェックボックスの入力欄が現れます
これにチェックをつけるとそのページはログインしないと見ることができなくなります。

フィールド名を “unblock” とすると表示/非表示とチェックマークの有/無の関係が逆になります。

マイページにどれだけの機能を持たせるかによってきますが、ユーザーが入力したデータを個別に管理するとなると、通常の購読者権限ではデータベースへの書き込みができないので、回避策を考えなければなりません。

カスタム投稿タイプをつかうことで可能かもしれません。すなわちあるカスタム投稿タイプにだけ投稿(新規作成/編集)する権限を持つカスタムユーザー権限を作ってしまうのです。
テンプレートの中でログインしているユーザーを確認し、そのユーザーに認められているカスタム投稿タイプを表示するわけです。

これは構想だけでまだ実践していませんので、確認できたらまた改めて記事にさせていただきます。

ツールバーを非表示にする

サイトにログインしないでアクセスすると表示されないのですが、ログインして閲覧するとデフォルトの設定では画面の一番上にルールバーが表示されるようになります。
特に必要性もありませんし、サイトをWordPressで作ってますよと宣伝しているみたいなものなので、会社やお店のホームページなどの場合は消してしまった方がいいでしょう。
toolbar

消し方は簡単で、管理画面の[ユーザー]-[あなたのプロフィール]で、「ツールバー」のところの「サイトを見るときにツールバーを表示する」というところのチェックをはずすだけです。

スポンサーリンク