follow us in feedly
PHP

認証機能をつけて会員様限定エリアを作成

企業サイトでは一部の顧客向けに限定コンテンツ(会員様向けの特典の告知など)をホームページ内に掲載するケースがあります。こうしたケースの会員様ログイン機能を設置してみます。ワードプレスが用意してくれている便利な組み込み関数がありますので主にそれらを利用したPHPの記述になります。

2019年3月5日

会員様限定エリアの完成形イメージ

ワードプレスで作成したサイトの一部のページ群に認証機能をつけてみます。ワードプレスのログイン機能を利用しますのであらかじめメンバー用のユーザーアカウントを作成しておきます。今回はユーザーは閲覧だけの利用を想定しますのでユーザー権限を購読者に設定しておきます。

まずは全体イメージです。/members/でアクセスできる固定ページと/members/・・・でアクセスできるカスタム投稿ページ(’post_type’ => ‘news’)がメンバー領域です。この領域にアクセスした際にログインしていなければログイン画面にリダイレクトさせます。ログイン画面はワードプレスのログイン画面(/wp-admin/)でもいいですし、TOPページなどにログインフォームを設置しておいてそちらにリダイレクトすることも可能です。

ワードプレスのメンバーページ領域

認証機能(auth_redirectなど)の記述

今回はメンバー領域を/members/でアクセスできる固定ページと/members/以下でアクセスできるカスタム投稿ページ(news)としていますので、まずはis_page()とis_singular()でメンバー領域へのアクセスかどうかを判定します。その上でログインしていなければログイン画面へリダイレクトします。
 auth_redirect()にはログインしているかどうかの判定機能が備わっていますのでauth_redirect()を使用する場合はis_user_logged_in()による判定は必要ありません。auth_redirect()を使用した場合のリダイレクト先はワードプレス標準のログイン画面(/wp-admin/)になります。

■/wp-admin/にリダイレクト
<?php if(is_page('members') || is_singular('news')): ?>
<?php auth_redirect(); ?>
<?php endif; ?>

関数リファレンス/auth redirect – WordPress Codex 日本語版

任意のページへリダイレクト

ワードプレス標準のログイン画面(/wp-admin/)を使用せずにログインさせたい場合は、ログインフォームをどこかしらのページに用意しておきます。例えばTOP画面にログインフォームを用意してそちらにリダイレクトさせる場合は以下のような記述になります。

■ログインフォームのあるTOP画面にリダイレクト
<?php if(is_page('members') || is_singular('news')): ?>
<?php if(!is_user_logged_in()) {
       wp_redirect(esc_url(home_url())); exit;
    }; ?>
<?php endif; ?>

関数リファレンス/is user logged in – WordPress Codex 日本語版

正規表現による判定

メンバー領域へのアクセスであるかどうかをURLの文字列から正規表現で判定することもできます。

<?php if(preg_match('/\A\/members\//', $_SERVER['REQUEST_URI'])): ?>
<?php if(!is_user_logged_in()) {
       wp_redirect(esc_url(home_url())); exit;
    }; ?>
<?php endif; ?>

以上がheader.phpによるメンバー領域へのアクセス判定とリダイレクト設定になります。

ログインフォーム、ログアウトボタンの記述

ログインフォームにある「ログイン状態を保存する」にチェックをせずにログインした場合はブラウザを閉じますと自動的にログアウトします。逆にチェックしてログインした場合はユーザーIDや認証トークンがブラウザのcookiesに保存されますので明示的にログアウトしない限りログイン状態が維持されます。ですので忘れずにログアウトボタンを設置しておきます。

■ログアウトボタン(ログアウト後はTOP画面に遷移)
<?php if (is_user_logged_in()): ?>
<a href="<?php echo wp_logout_url(home_url()); ?>">ログアウト</a>
<?php endif; ?>

テンプレートタグ/wp logout url – WordPress Codex 日本語版

ログインフォームを用意する場合は以下の記述になります。引数にログイン後の遷移先となるURLを渡すことができますのでメンバーページを指定しておきます。

■ログインフォーム(ログイン後はメンバーページに遷移)
<?php $args = array('redirect' => esc_url(home_url()).'/members/'); ?>
<?php wp_login_form($args); ?>

テンプレートタグ/wp login form – WordPress Codex 日本語版


ワードプレスのログインフォーム

以上で「認証機能をつけて会員様限定エリアを作成」の解説を終わります。

このエントリーをはてなブックマークに追加