ユーザー登録やユーザー管理を統合的に扱う WordPress のプラグインであるフロントエンドユーザー管理プラグインを利用した会員限定ページの作成方法をご紹介します。
会員のみが閲覧できる投稿やページの作成には、これまで以下の記事の通り、主にページテンプレートの機能を利用したアクセス管理をご紹介してきました。
フロントエンドユーザー管理プラグインのバージョン2.0からは、上記のようなページテンプレートを利用せずに管理画面から、会員限定の閲覧制御を簡単に行えるようになりました。今回はこの会員制ページ条件の機能をご説明いたします。
フロントエンドユーザー管理プラグインで会員制ページ条件の機能を利用するには、バージョン2.0以上(一部機能追加のため、2.0.1以上推奨)が必須となりますので、すでにプラグインをご利用の方はサポートオプションをご購入の上でアップグレードしてください。
会員制ページ条件の基本的な解説
会員限定ページを作成するには、まず管理メニューのユーザー管理 » オプション設定 » 会員制ページ条件の追加 から閲覧制御の条件を指定します。
設定項目は以下の通りです。条件式は保存するたびに新しい条件式が表示されるのでいくつでも設定できます。
- 条件式名
- 条件式の名称です。投稿画面で条件式を選択する際に表示されます。条件式名は必ず指定します。
- リダイレクトURL
- 条件式に合致しない場合にページを表示しようとした場合に会員登録や有料会員の案内などのページに転送させる場合の転送先URLを指定します。指定しなくてもかまいません。
(2.5.2以上)%redirect_to% を入力すると現在表示中のURLで置換されます。例えば、ログインページで http://domain/login/?redirect_to=%redirect_to% のように指定するとログイン後に現在表示中のページに戻ってくる事が出来ます。 - 条件不適合時の代替タイトル
- 条件式に合致しない場合に、本来のタイトルの代わりに表示されるタイトルです。
- 条件不適合時の代替コンテンツ
- 条件式に合致しない場合に、本来のコンテンツの代わりに表示されるコンテンツです。
- 出力しない(特にページ向け)
- チェックを入れると、会員制ページ条件に合致しない場合は記事自体が出力されません。
- クローラーを会員制ページ条件の適用外にする(2.5.2以上)
- チェックを入れると、クローラー(GoogleとBing)は会員制ページ条件に関係なくコンテンツを読み込むようになります。ヘッダーにページのキャッシュをしないようにするタグが出力されます。User Agent で判断しているため、偽装すれば誰でも閲覧できるようになるので注意が必要です。
- More 区切りまでは出力する
- <!--more--> までのコンテンツは自由に閲覧できるようにし、<!--more--> 以降を会員制にする場合にチェックを入れます。
- ○○文字を記事から抜粋表示する(2.5.2以上)
- テキストボックスには文字数を半角で入力します。例えば100を入力すると、会員制ページ条件に合致しない場合に100文字まで自動的に抜粋して表示されるようになります。指定しない場合は抜粋表示はされません。
- 条件式
- ユーザー属性キーには、ユーザー属性の追加で指定したフィールド名を入力します。ユーザー属性値には、適合条件となる値を入力します。また、条件式にはPHPコードを直接指定することも可能です(実例は後述)。また、部分一致、完全一致など比較条件を指定します。
- Term ID (カンマ区切り)(リダイレクトURLでのみ有効)(2.8以上)
- カテゴリーIDなどのTerm IDを指定すると、カテゴリーやタグページ及びそのカテゴリーに含まれる投稿ページにまとめて条件式を適用させることが可能です。投稿ページで会員制ページ条件を選択する必要はありません。記載の通り、リダイレクトURLでのみ有効となり、条件不適合時の代替タイトルや条件不適合時の代替コンテンツは利用できませんのでご注意ください。
条件式を指定しない場合は、ログインしているかどうかのみを判定いたします。
条件式をどの投稿タイプ(投稿、ページ、カスタム投稿タイプ)に表示するかは、あらかじめオプション設定の環境設定にある会員制ページ条件適用タイプでチェックを入れておく必要があります。
会員制ページ条件適用タイプでチェックを入れた投稿タイプの記事入力画面の右サイドバーに会員制ページ条件の選択欄が表示されます。条件式が指定された記事は、設定された条件式に応じて、リダイレクトしたり、代替タイトルやコンテンツを表示したりします。
ケース1:会員種別が複数ある場合の会員種別に応じた閲覧制御
会員の種類として、ブロンズ会員、シルバー会員、ゴールド会員の3つの会員種別があり、それぞれで閲覧可能なページが異なる場合を考えてみます。ゴールド会員はゴールド会員、シルバー会員、ブロンズ会員向けの全てのページを閲覧でき、シルバー会員は、ゴールド会員以外のシルバー会員、ブロンズ会員のページを閲覧、ブロンズ会員はブロンズ会員向けのページのみ閲覧できる、というものを設定してみます。
条件式#0 でブロンズ会員向けの条件式、条件式#1 でシルバー会員向けの条件式、条件式#2 でゴールド会員向けの条件式を設定します。会員種別のユーザー属性のフィールド名は account_type とします。条件式のみをまとめたものが以下の通りです。
ユーザー属性値をスペースで区切ると、論理和(OR)で適合するか判定することになります。ブロンズ会員向けの場合は、「ゴールド シルバー ブロンズ」という感じでスペースで区切り、どれかに当てはまる場合は記事のコンテンツを出力することになります。
ケース2:会員の有効期限に応じた閲覧制御
有料会員制サイトなどでは、有効期限内のみ記事を閲覧させたい、というケースはよくあります。ここでは、ユーザー属性に設定されている有効期限(フィールド名:membership_date)が有効期限内かどうかで閲覧を制御する条件式を設定してみます。
今回はケース1とは異なり、条件式に直接PHPコードを指定するため、ユーザー属性値と比較条件の間にあるセレクトボックスでコードを選択しています。また、比較条件は以上を選択します。
ユーザー属性キー
return strtotime($current_user->membership_date)+86400;
ユーザー属性値
return date_i18n('U');
会員の有効期限には、2012-04-12 のような年月日が保存されているとします。上記の意味は、会員の有効期限のタイムスタンプと現在時刻のタイムスタンプを比較して会員の有効期限が現在時刻よりも先の日付であれば記事を閲覧できる、という条件式になります。
ケース3:記事を途中まで表示し、続きを見るにはログインが必要
ログインしないと記事の全文を読むことができないような閲覧制限をかける場合で、ログインボックスを記事に表示する方法を解説します。
設定は非常に簡単で、以下の通りです。ログインすると記事にリダイレクトして、全文が読めるようになります。
- 条件不適合時の代替コンテンツ
- [fua] と入力するだけです。必要に応じてログインを促すメッセージ(この記事を閲覧するにはログインしてください。)を入力します。[fua] ショートコードにはタイトルを表示させない [fua notitle=1] といったオプションがあります。
- More 区切りまでは出力する
- チェックを入れます。
まとめ
以上の通り、会員制ページ条件を利用すれば、簡単に会員限定ページが作成できることをお分かりいただけたと思います。条件式には様々な設定が可能なので、メンバーサイトの条件に合致した指定を色々とお試しください。
番外編: 記事単位での閲覧制限をかける方法
記事単位で商品化し、購入した人のみが閲覧できる仕組みを作る場合、記事ごとに会員制ページ条件を作成するのは大変面倒です。そこで利用できるのが、商品編集時のアドバンストモードにある「購入済み表示」と「購入済み代替テキスト」という機能です。
「購入済み表示」にチェックを入れると、購入済みの場合に、カートボタンを表示しなくなります。また、購入済みのユーザーがアクセスすると、カートボタンの代わりに「購入済み代替テキスト」が表示されるようになります。
記事単位での閲覧制限をかける場合は会員制ページ条件よりも購入済み代替テキストを使用するのが良いかもしれません。