201107-20
WordPressで会員認証ページを作る
WordPressでWEBサイトを構築していると、時折Basic認証を使いたくなる場面に遭遇します。
Basic認証は手軽に、ユーザー名とパスワードを知らなければ閲覧できない会員のみのページを設定することができるんだけど、通常ディレクトリごとの領域で設定する。
WordPressでオリジナルテーマを制作した人ならお解かりだろうけど、WordPressは固定ページ(下層ページにあたるページ)を生成する際にディレクトリ構造にならない。
パーマリンク設定でカスタム構造を使用している人がほとんど(当サイトもそう)ですが、ディレクトリに見えてもmod_rewriteでパーマリンクをカスタム構造に書き換えているだけなので、下層ディレクトリがありそうなあくまで擬似的なURIとなっている。擬似的なのでBasic認証をかけるってことは基本的に出来ないのです。
WordPressの構築サイト全体をロックかけるとかなら容易なんだけど、一部のページ(もしくは一部のカテゴリーなど)を認証させたい場合はそうもいかない。
ではWordPressで手軽に会員の閲覧領域を作るにはどうしたら良いのだろうか?
閲覧専用のメンバーを作成する
管理画面より新規ユーザーを作成。
必ず権限は「なし」にすること。
auth_redirect()を使う
次に認証のさせ方。
実はauth_redirect()を使うと、“ログインしていないユーザーは強制的にログイン画面へ遷移させる”ということができる。これは会員のみ閲覧させたいページの最上部に記述することで実現できる。会員専用のテンプレートファイルか、新たにincludeするファイルを作り、以下のコードを記述する。
<?php if (is_user_logged_in()){ }else {auth_redirect(); }; ?>
必ず最上部で読み込むようにすること。
さて、これでログインしていない場合はWordPressの管理画面のTOPに遷移するようになるけど、このままだともろWordPressのロゴなので、ロゴを変更してあげるとより良いかも。
ロゴを変更しよう
ログイン画面のロゴは、functionに記述すれば変更できる。ここでCSSを改変してしまおう。
特にデフォルトでは
- background-image指定
- width:326px;
- height:67px;
とかなっているので、任意のロゴに変える場合にはこれらを再指定してあげよう。
<?php function login_logo() { echo '<style type="text/css"> #login h1 a { background: url('.get_bloginfo('template_directory').'/images/logo.png) no-repeat; width: (ロゴのサイズ)px; height: (ロゴのサイズ)px; } </style>'; } add_action('login_head', 'login_logo'); ?>
これでログインしているメンバーのみが閲覧可能な会員ページを作れ、ログインしていない人はログインページに遷移するように出来る。
注意すべきは会員ページのみで読み込ませるテンプレートファイルだろうか。他のページで使ってしまうと、即座にログイン必須なページになってしまうので注意。
また、その逆で、一般公開したくないページでしっかりとauth_redirect()させとかないと、うっかり閲覧可能になってしまったりする。カスタム投稿とかと併用する場合は特に注意が必要かもしれない。
最初難しく考えていたけど、auth_redirect()という便利なもののおかげで難しくないのは、さすがWordPressと言ったところでしょうか。
コメントを残す