【WordPressで会員制サイト】ログインフォームを設置し、権限によってリダイレクトするページを変える

WordPressで会員制サイトを作る場合、多くはプラグインのWP-Membersを使うと思います。しかし、そこまで大げさなものでもない場合、

  • ログインしているかどうかの判断
  • ログインフォームの設置
  • ログインした権限

で動作を振り分け、設定して、ちゃちゃっとやっちゃいたいと思います。

行いたい動作

  • 会員のみ閲覧できるコンテンツを用意
  • 非会員にはログインフォームを表示する
  • 会員IDでログインした場合、任意のページにリダイレクトする

ログインしているかどうかの判断

<?php if (is_user_logged_in()) : ?>
ログインしている時に表示されるコンテンツ
<?php else : ?>
ログインしていない時に表示されるコンテンツ
<?php endif; ?>

会員にだけ見せたい部分を「ログインしている時に表示されるコンテンツ」に記述します。
こうすることにより、その部分はWordPressのログインIDとパスワードを知っている人しか見れません。

ログインフォームの設置

<form method="post" action="<?php echo wp_login_url() ?>?redirect_to=<?php echo esc_attr($_SERVER['REQUEST_URI']) ?>">
<dl>
<dt>ユーザー名:</dt><dd><input type="text" name="log" id="login_username" value="" /></dd>
<dt>パスワード:</dt><dd><input type="password" name="pwd" id="login_password" value="" /></dd>
</dl>
<p><input type="submit" value="ログイン" /></p>
</form>

ログインするためのフォームを「ログインしていない時に表示されるコンテンツ」に記述します。

<?php if (is_user_logged_in()) : ?>
ログインしている時に表示されるコンテンツ
<?php else : ?>
<form method="post" action="<?php echo wp_login_url() ?>?redirect_to=<?php echo esc_attr($_SERVER['REQUEST_URI']) ?>">
<dl>
<dt>ユーザー名:</dt><dd><input type="text" name="log" id="login_username" value="" /></dd>
<dt>パスワード:</dt><dd><input type="password" name="pwd" id="login_password" value="" /></dd>
</dl>
<p><input type="submit" value="ログイン" /></p>
</form>
<?php endif; ?>

これで、ログインしている人にはコンテンツを、ログインしていない人にはログインフォームを表示します。

ログイン後、管理画面に飛ばさない

WordPressのデフォルト設定ではログインすると管理画面が表示されるようになっています。そのため、強制的に任意のページにリダイレクトする設定を行います。
この時、functions.phpに下記のように記述する方法もありますが、これではログインしたユーザーすべてが任意のページにリダイレクトしていまします。

function mts_check_login() {
	global $current_user;
	get_currentuserinfo();
	extract($current_user->wp_capabilities);
	if ($subscriber) {
		wp_redirect(get_bloginfo('url'));
	}
}
add_action('admin_init', 'mts_check_login');

そのため、ログインしたユーザーの権限により、リダイレクトするページを変えたいと思います。

ログイン権限でリダイレクトページを変える

プラグイン「Peter’s Login Redirect」を使用します。

  1. 管理画面の[プラグイン] → [新規追加]より「Peter’s Login Redirect」で検索しインストール、有効化
  2. [設定] → [Login/logout redirects]を開く

権限が購読者の場合、任意のページにリダイレクトし、それ以外の権限はデフォルトのまま

  1. 「Specific roles」で、「subscriber(購読者)」を選ぶ
  2. リダイレクトしたいURLを入力
  3. [Update]ボタンをクリック
201312131

会員IDが1つで、会員全員がそれを利用してログインする場合は「Username」でログインユーザーで指定しても大丈夫です。

以上で、行いたい動作はだいたい完了できたんじゃないでしょうか。

おまけ 管理バーを非表示にする

WordPress3.1より、ログイン後にサイトのページ上部に管理バーが表示されるようになりました。
上記より「購読者」権限を管理画面にリダイレクトしないようにしても、管理バーより管理画面に入れてしまいます。
そのため、管理バーを非表示にしたいと思います。

  1. [ユーザー] → [ユーザー一覧]から該当のユーザー編集画面を表示
  2. [ツールバー]「サイトを見るときにツールバーを表示する」のチェックを外す
201312132

複数の「購読者」権限がいる場合、一人ひとり非表示設定を行うのはめんどうなため、functions.phpに下記を追加します。

function my_function_admin_bar($content) {
  return ( current_user_can("administrator") ) ? $content : false;
}
add_filter( 'show_admin_bar' , 'my_function_admin_bar');

「管理者」権限でログインしている場合以外表示しない、という指定です。
これで会員さんに、裏で動いているWordPressの存在を意識させずに、閲覧してもらえるかと思います。

参考サイト:
WordPress ログインフォームをページ上に表示してログインするには
WordPress 3.1で追加された管理バーを非表示にする方法