【応用編】WordPressでログイン後だけ見えるコンテンツを出し分ける方法

WordPress

WordPressでは、ページ全体を非公開にするだけでなく、「ログインしている人だけに特定の内容を見せる」 といった細かい制御も可能です。
たとえば、会員専用の特典や、登録ユーザーだけが見られるダウンロードリンクなどを設置したいときに便利です。

本記事では、ログイン状態に応じてコンテンツを出し分ける方法を初心者でも分かりやすく解説します。

ログイン状態でコンテンツを出し分ける必要性とは

WordPressでサイトを運営していると、「ログインしているユーザーには会員特典を表示したい」「まだ登録していない人には、ログインを促すメッセージを出したい」といったケースは意外と多くあります。

こうしたときに便利なのが、ログイン状態に応じたコンテンツの出し分けです。
単に「ページを非公開にする」のではなく、同じページの中で見せる・見せないを切り替えることで、ユーザー体験を損なわずにアクセス制御ができます。

会員限定の特典や情報を表示したい場合

会員制サイトやオンラインサロン、会員登録型のECサイトなどでは、ログイン中のユーザーだけに「特別価格」や「限定コンテンツ」を表示することがあります。
ログイン状態でのみ特典を見せることで、会員登録のモチベーション向上や離脱防止につながります。

非ログインユーザーに別の案内を表示したい場合

非ログインユーザーに対しては、コンテンツを隠す代わりに「会員登録はこちら」や「ログインして続きを見る」といった案内を表示するのがおすすめです。
完全にブロックするよりも、登録への導線を設けることで自然な誘導ができます。

セキュリティやUX(ユーザー体験)の向上

ログイン状態でコンテンツを出し分けることで、機密情報や会員専用データを安全に管理できます。
また、ユーザーのステータスに応じた情報だけを見せることで、無駄な情報を減らし、操作しやすいサイト体験を実現できます。

このように、ログイン状態による出し分けは「制限」ではなく、“ユーザーに合わせた最適な情報提供”のための仕組みといえます。

基本の条件分岐タグ「is_user_logged_in()」を使う方法

WordPressでログイン状態を判定するには、is_user_logged_in() という関数を使います。
この関数は「ユーザーがログインしているかどうか」を判別し、

  • ログイン中 → true(真)
  • ログアウト中 → false(偽)
    を返します。

つまり、この関数を条件分岐に使うことで、ログイン中のユーザーにだけ特定のコンテンツを表示するといった制御が簡単に行えます。

基本の書き方

<?php if ( is_user_logged_in() ) : ?>
    <p>ログイン中のユーザーにだけ表示される内容です。</p>
<?php else : ?>
    <p>このコンテンツを閲覧するにはログインが必要です。</p>
<?php endif; ?>

上記のコードをテンプレート(例:page.phpsingle.php)に挿入すると、ログインしているユーザーには上のメッセージが、ログインしていないユーザーには下のメッセージが表示されます。

固定ページ内でショートコードとして使いたい場合

テーマファイルを編集せず、投稿や固定ページの中でも使いたい場合は、functions.php にショートコードを登録しておくと便利です。

// ログイン中ユーザー向けのショートコード
function show_for_logged_in_user( $atts, $content = null ) {
    if ( is_user_logged_in() ) {
        return do_shortcode($content);
    }
}
add_shortcode('logged_in', 'show_for_logged_in_user');

// 非ログインユーザー向けのショートコード
function show_for_logged_out_user( $atts, $content = null ) {
    if ( !is_user_logged_in() ) {
        return do_shortcode($content);
    }
}
add_shortcode('logged_out', 'show_for_logged_out_user');

これを追加しておくと、記事内で以下のように使えます。

[logged_in]ログインユーザー限定のコンテンツです。[/logged_in]

[logged_out]この内容を読むにはログインしてください。[/logged_out]

この方法なら、ノーコードで出し分けが可能なので、複数ページに使い回したいときにも便利です。

注意点
  • 閲覧制限の対象がSEO非公開である場合は、noindex設定も併用しましょう。
  • キャッシュ系プラグインを使っていると、ログイン状態が正しく反映されないことがあります。
    → キャッシュ除外設定で「ログインユーザーをキャッシュしない」にしておくのが安全です。

この「is_user_logged_in()」を使いこなせば、「会員専用エリア」「限定ダウンロードページ」「ログイン後だけ見える特典」など、柔軟なコンテンツ制御が簡単に実現できます。

ユーザー権限(ロール)ごとに出し分ける方法

WordPressには、ログインしているユーザーの「権限(ロール)」を判定できる仕組みがあります。
たとえば「管理者だけに見せたい情報」や「購読者には非表示にしたい要素」を制御することができます。

基本的には、current_user_can() 関数を使います。

<?php if ( current_user_can('administrator') ) : ?>
  <p>このコンテンツは管理者のみが閲覧できます。</p>
<?php elseif ( current_user_can('editor') ) : ?>
  <p>このコンテンツは編集者のみが閲覧できます。</p>
<?php else : ?>
  <p>あなたの権限ではこのコンテンツを閲覧できません。</p>
<?php endif; ?>

よく使われる権限名(ロール)

権限名対応するユーザー層
administrator管理者
editor編集者
author投稿者
contributor寄稿者
subscriber購読者
活用例
  • 会員サイト:購読者のみ閲覧できる「会員限定ページ」を作成
  • 社内ポータル:管理者だけが社内報やファイルを見られるように設定
  • 複数講師のブログ:投稿者によって表示されるメニューやお知らせを切り替える

このように「ユーザー権限による出し分け」を行うことで、ログイン後の体験をよりパーソナライズでき、不要な情報を非表示にすることで管理画面やサイトの見やすさも向上します。

ログインしていないユーザーに別メッセージを表示する

会員サイトや会員限定コンテンツでは、ログインしていないユーザーに「ログインを促すメッセージ」を表示するケースが多くあります。
is_user_logged_in() を使えば、ログインしていない場合だけ別の内容を表示することが可能です。

<?php if ( is_user_logged_in() ) : ?>
  <p>ようこそ!会員限定コンテンツをご覧いただけます。</p>
<?php else : ?>
  <p>この内容を閲覧するにはログインが必要です。<a href="<?php echo wp_login_url(); ?>">こちらからログイン</a>してください。</p>
<?php endif; ?>

上記コードでは、未ログインユーザーに「ログインページへのリンク付きメッセージ」を表示しています。
これをテンプレートファイル(例:page.phpsingle.php)やウィジェット内に組み込むことで、アクセス状況に応じて柔軟に案内できます。

プラグインで簡単に出し分ける方法

コードを書かずに出し分けたい場合は、プラグインを活用するのがおすすめです。
代表的なものは次の2つです。

1. WP User Manager

引用:https://ja.wordpress.org/plugins/wp-user-manager/

ログイン状態に応じた表示・非表示設定が可能な会員管理プラグイン。
特定ページを「ログイン必須」にする設定もワンクリックで行えます。

2. Restrict Content

引用:https://ja.wordpress.org/plugins/restrict-content/

シンプルなアクセス制限用プラグイン。
投稿や固定ページの編集画面に「表示対象の権限」を設定できるため、コード不要で管理者・会員限定ページを実現できます。

これらのプラグインを使えば、条件分岐タグを書く必要がなく、管理画面から直感的に「誰が見られるか」を設定できます。

出し分けコンテンツを使うときの注意点

ログイン状態の判定や出し分けは便利ですが、いくつか注意点もあります。

  • キャッシュ系プラグインとの併用に注意
    ログイン状態に応じた出し分けは、キャッシュが有効だと正しく切り替わらない場合があります。
    「未ログイン時だけキャッシュする」設定を行うか、出し分けページをキャッシュ対象外に設定しましょう。
  • 検索エンジンへの影響
    未ログイン時に非表示のコンテンツは、Googleなどのクローラーも見られません。
    SEOを意識するページでは「概要だけを公開」し、詳細部分をログイン後に表示するなどの工夫が必要です。
  • ユーザー体験を損なわないようにする
    ログインが必要なページでは、単に「権限がありません」と表示するのではなく、ログインや登録への導線を明示して離脱を防ぐようにしましょう。

まとめ

WordPressでは、is_user_logged_in()current_user_can() を使うことで、ログイン状態やユーザー権限に応じたコンテンツ出し分けが柔軟に実現できます。

プラグインを使えば、コードが苦手な人でもクリック操作で制御可能です。
ただし、キャッシュ設定やSEO面には注意が必要です。

この記事を書いた人
管理人

2012年にWebデザインの勉強を始め、2013年より制作会社に勤務。
これまでに500件以上のWebサイト制作・運用に携わってきました。
現在も制作会社に勤務しながら、Webデザインスクールのトレーナーとしても後進の育成に取り組んでいます。
WordPressやデザインの実践的なノウハウを、初心者にもわかりやすく発信できるよう試行錯誤しています。

管理人をフォローする
WordPress
スポンサーリンク
管理人をフォローする

コメント

タイトルとURLをコピーしました