会員専用サイトや閲覧制限のあるサイトを作る際に「WP-Members」というプラグインを使うと便利です。
今回の案件は、通常の投稿を会員専用とし、カスタム投稿を作ってこちらは一般向けの情報を載せました。
使用環境
WP-Membersはそんなに難しくないです(たぶん)。
参考にさせていただいたページを記述しますので、読み込んでみてください。
- WP-Membersで会員制サイトを作ろう!作り方を全網羅&徹底解説。 – misallychan.com
- WordPress 会員制サイトの作り方 WP-Members | hijiriworld Web
- WP-MembersでWordPressに会員サイトを構築する流れ | わぃおがわ
*↑ misallychan.comさん、hijiriworld Webさん、わぃおがわさんの記事を参考にさせていただきました。
前述しましたが、今回は投稿をすべて会員専用にしてしまいます。
また、メンバー登録もないので、WP-Membersの設定は至極シンプル。
「Posts」をブロックしただけです(汗)。
あと「ダイアログ」タブを開いて、適宜メッセージを変更しておくといいかもしれませんね。
さて、今回はここからが本題なのです。
WP-Membersで、投稿をブロックして、投稿の一覧を載せる固定ページもブロックします。
なんにも考えなければこれでもいいんですが、大概はサイドバーにカテゴリーのウィジェットやアーカイブのウィジェットを載せたりするじゃないですか?
こんな感じで…
赤枠で囲んで部分がカテゴリーのリストです。
こんな感じで表示して、カテゴリーを選んでしまうと、そのカテゴリーの内容が一覧で見えてしまうんですね。
月別アーカイブの一覧なども同様に表示されてしまいます。
これってちょっとマズくないですか?
まあ、CSSを調整して、カテゴリーやアーカイブの一覧の際は、タイトルだけにしてコンテンツ内容を表示しないという手もあるとは思うんですが、今回は(クライアントの手前?)カテゴリーやアーカイブの一覧の場合も内容をすべて表示したかったんです。
しかーし、だがしかーし
同じように悩んでいる人が世の中にはいるもんです!
*↑ ゆめとちぼーとげんじつとさんの記事を参考にさせていただきました。
もう1つ、カスタム投稿の条件分岐も参考にさせていただきました。
*↑ Mac使いの備忘録 iRecさんの記事を参考にさせていただきました。
2つのページを参考にズボラな僕が考えてみた備忘録です。
今回も毎回お世話になっているテーマ「Enfold」をカスタマイズしていきます。
includes/loop-index.php の 15行目あたりの if (have_posts()) : の直後に
1 2 |
// ログインチェック追加 if (is_user_logged_in() || get_post_type() === 'open_info') : // edit 1709 |
…と、ログイン状態かつカスタム投稿かどうかのチェックする[if文]を入れておきます。
そうすることで、カスタム投稿なら通常通りの表示を行います。
*あっ、言ってなかったですが、カスタム投稿の投稿タイプ名が[open_info]です。
で、ちょっと本筋と外れますが、表示を整える為に1つ[div]をかましておきます。
87行目あたりの echo “<article class='”.implode …で始まるコードの直前に
1 |
echo "<div class='entry-content-wrapper clearfix'>"; // edit 1709 |
と追加し、
291行目あたりの echo “</article>”; の直後に
1 |
echo "</div>"; // edit 1709 |
と記述して、[div]を閉じておきましょう。
本筋に戻ります。
294行目あたりの endwhile; の直後に
1 2 3 4 5 6 7 |
// ログインチェック追加 else : echo "<p>この情報へのアクセスは、〇〇の会員に限定されています。会員の方はログインしてご覧ください。</p>"; echo "<div class='loginMesse'>"; echo "<form name='form' method='post' action='//該当するURL等が入ります/members'><fieldset><label for='username'>ユーザー名</label><div class='div_texbox'><input type='text' name='log' class='username' id='username'></div><label for='password'>パスワード</label><div class='div_texbox'><input type='password' name='pwd' class='password' id='password'></div><input type='hidden' name='rememberme' value='forever'><input type='hidden' name='redirect_to' value='//該当するURL等が入ります/members'><input type='hidden' name='a' value='login'><input type='hidden' name='slog' value='true'><div class='button_div'><input type='submit' name='Submit' class='buttons' value='ログイン'></div></fieldset></form>"; echo "</div>"; endif; // edit 1709 |
という感じで、通常の投稿の場合、ログインしていないとログインフォームを表示するように変更しました。
このあとは、else: に繋がります。
実際に機能した画面はこんな感じですかね。
まあ、ログインしていない時は、投稿(会員用)のカテゴリーやアーカイブのウィジェットを表示しないという方法が簡単かもしれませんけどね。
すべての案件にベストな答えは与えられなくとも、どこかの案件にベターな答えは用意したいって感じですかね。ワールド・ビジョン・ジャパン的な?…知らんけど。