yusk -ユースク-

  • WordPress
  • Twitter
  • RSS
  • Facebook

201107-20

WordPressで会員認証ページを作る

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と言ったところでしょうか。

トラックバックURL

コメントを残す

メールアドレスが公開されることはありません。