WordPressで会員専用ページを作成しログインユーザーにのみ表示する方法(会員制サイト)

WordPressで会員専用ページを作る方法

WEBページの表示において、一般ユーザーと会員ユーザーとで表示内容を変えたいという要望は多いと思います。会員限定での販売や社内向け情報などの表示が、それに当たると思います。

また、SNSなどを構築した場合に、ログインしているか否かで表示を変えたい場合にも同じ手法が使われると思います。今回の記事では、WordPressにてログイン状況で表示を変えるやり方を紹介します。

スポンサーリンク

ページ全体をログインユーザーのみに表示可能にする

ページの一部ではなく、ページ全体をログインユーザーのみに表示するということは、言い換えれば「会員専用サイト」もしくは「会員制サイト」ということになります。早速作り方をみていきましょう!

ページ冒頭でログイン判定をする

ログイン判定をする場合には、WordPressで用意されている関数を使えば、とても簡単です。

if (!is_user_logged_in()){  // ログインしていない場合にはカッコの中に入ります
	echo 'ただ今ログインしておりません。';
} else {  // ログインいる場合には、以下の処理がなされます
	echo 'ログイン中です♪';
}

このような具合いで、ページの冒頭でログイン判定をして処理をしていきます。ログインしている場合に処理がなされる部分に、ページを表示するためのソースコードを書けば、バッチリ表示されることになります。

しかし、この場合だとログインしていない場合に何を表示すればいいのか、困ってしまいます。あまり実用的なやり方ではありませんね。次項で実用的なコードを紹介します。

ログインしていない場合にはトップページを表示する

ページ冒頭でログイン判定を行い、

  • ログインしていなければトップページへ強制送還
  • ログインしている場合にはページを表示

という処理を行ってみましょう!実はとても簡単なコードで成し遂げられます。

if (!is_user_logged_in()){
  header( "location: " . home_url() );
}

この3行が冒頭にあれば、成し遂げられます。とても簡単で、拍子抜けしてしまいましたか?このコード、かなり便利に使えますのでオススメです!

ページの一部をログインユーザーのみに表示する

該当表示部分でログイン判定をする

今度はページ全体ではなく、任意の一部分でログインの有無により表示を変える方法を説明します。まぁ、前項で紹介したコードと全く同じなのですけれども...。

if (!is_user_logged_in()){  // ログインしていない場合にはカッコの中に入ります
  echo '会員様はログインをお願いします';
} elese {  // ログインいる場合には、以下の処理がなされます
  echo '会員限定特価にて大放出!!';
}

この要領で該当部分に書き加えていけば、ログインユーザー向けの表示が可能となります。ログインをするための「ID入力欄」や「パスワード入力欄」、「ログインボタン」などもログインの有無で表示を変えるべき部分ですね。

会員制サイトの実用を考えた場合に必要となる仕様

大前提として、「サイト会員」にはWordPressのユーザーの中で一番低位の「購読者」権限を付与するということで話をすすめます。

ページ内の任意の場所にログインフォームを設置する

サイト会員が会員専用ページを開くためには、ログインすることが必要になります。WordPressの管理者はおそらく、「ドメイン/wp-login.php」のページからログインしているかと思いますが、会員にこのURLを知らせるのは得策ではないと思います。

ほとんどの会員制サイトでは、トップページの目立つ位置にログインフォームが設置されています。好きな場所にログインフォームを設置してみましょう!コードは、ズバリこれです!

<?php if (is_user_logged_in()) : ?>
  <p>   ようこそ! <?php global $current_user; echo $current_user->display_name ?>さん</p>
  <p>   ログアウトは &raquo; <a href="<?php echo wp_logout_url() ?>&amp;redirect_to=<?php echo esc_attr($_SERVER['REQUEST_URI']) ?>">こちら</a></p>
<?php else : ?>
  <p>会員専用ページを閲覧するには、ログインして下さい。</p>
  
  <form method="post" action="<?php echo wp_login_url() ?>?redirect_to=<?php echo esc_attr($_SERVER['REQUEST_URI']) ?>">
    <p><label for="login_username">ログインID:</label></p>
    <p><input type="text" name="log" id="login_username" value="" size="36" /></p>
    <p><label for="login_password">パスワード:</label></p>
    <p><input type="password" name="pwd" id="login_password" value="" size="36" /></p>
    <p><input type="submit" value="ログイン" /></p>
  </form>
<?php endif; ?>

いつでもどこでも、WordPressにログインできる、とても便利ですね!

ログイン後ダッシュボードへは移動しない

サイト会員は、WordPressを管理する必要はありません。したがって、WordPressにログインした場合に、ダッシュボードには行ってほしくありません。ダッシュボードが表示された場合に、サイト会員も困惑してしまうと思います。

そんなわけで、管理者以外はログイン後ダッシュボードを開かない仕様を加えるべきだと思います。コードは、これ!!
functions.php」に追記します。

//管理者以外はログイン成功後ダッシュボードではなくトップページへ飛ばす
function redirect_login_front_page() {
  if( !current_user_can('administrator') ){
    $home_url = site_url('', 'http');
    wp_safe_redirect($home_url);
    exit();
  }
}
add_action( 'admin_init', 'redirect_login_front_page' );

管理者以外は、ログイン後にはトップページを表示する仕様となりました。

WordPressの管理バーを非表示にする

やはり、サイト会員はWordPressを管理するわけではありません。WordPressの管理バーも不要となりますので、非表示にしておきましょう!WordPressの管理者のみ、表示させるようにしておきます。
functions.php」に追記します。

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

これで、かなりスッキリとした表示が実現できたと思います。

ログアウトリンクを作成する

先ほどのログインフォームのコードの中に「ログアウトリンク」は含まれていますが、もう一度改めて。ログアウトのリンクのコードはこのようになります。

ログアウトは &raquo; <a href="<?php echo wp_logout_url() ?>&amp;redirect_to=<?php echo esc_attr($_SERVER['REQUEST_URI']) ?>">こちら</a>

ログアウトを敢えてしたい場合には、これでOKです!

まとめ

会員制サイト、会員専用ページは、このようにして作っていきます。今回紹介した仕様は複雑な事は一切しておらず、機能も多くはありません。

クッキーなども使用した会員制サイトについては、後日別記事にて案内できればなぁと考えております。

コメント