【WordPress】ログインユーザーのみコンテンツを表示する方法|ページキャッシュ環境での注意点

WordPressサイトにおいて、特定のコンテンツをログインユーザーのみに表示したい場合、条件分岐を利用することが有効です。この記事では、その具体的な方法とページキャッシュ環境での注意点を解説します。

この記事でわかること

  • is_user_logged_in() を使った条件分岐
  • ページキャッシュ環境で意図しない表示になるリスクと対処法
  • ショートコード・プラグインでの実装方法
スポンサーリンク

is_user_logged_in() 関数を使った条件分岐

is_user_logged_in() 関数を使用すると、ユーザーがログインしているかどうかを確認し、ログインユーザーにのみコンテンツを表示することができます。

テンプレートファイル:ログイン状態で表示を切り替える
if ( is_user_logged_in() ) {
    echo '<p>ようこそ、ログインユーザーさん!</p>';
} else {
    echo '<p>ログインしてください。</p>';
}
ページキャッシュ環境では意図しない表示になることがある
is_user_logged_in()リクエストごとに判定するだけで、キャッシュを考慮する仕組みはありません。WP Super Cache・Cocoonの高速化設定などのページキャッシュを使っている場合、あるページが最初にキャッシュされた時点の判定結果がそのまま固定されます。会員限定コンテンツの出し分けにこの方法を使うと、キャッシュ生成時の状態次第で、本来見せてはいけない相手に会員限定文言が表示され続けてしまう可能性があります(1989・3287・3302で確立したのと同種のリスクです)。対策としては、該当ページをキャッシュ対象から除外するか、キャッシュプラグインにログイン状態別のキャッシュ設定がある場合はそれを有効にしてください。本格的な会員限定コンテンツの制御には、後述のプラグインの利用も検討してください。

ショートコードを使った方法

ショートコードを使用すると、投稿やページ内で条件分岐を簡単に実装できます。

functions.php:ログインユーザー限定のショートコード
function logged_in_content_shortcode( $atts, $content = null ) {
    if ( is_user_logged_in() ) {
        return do_shortcode( $content );
    }

    return '';
}
add_shortcode( 'logged_in', 'logged_in_content_shortcode' );
固定ページ・投稿の本文での使用例
[logged_in]ログインユーザーにのみ表示されるコンテンツ[/logged_in]

未ログインユーザー向けの代替メッセージ表示など、より発展的な実装はログインユーザーにだけ表示するコンテンツをショートコードで実装する方法で詳しく解説しています。

プラグインを利用する方法

プラグインを使用することで、コードを書くことなく条件分岐を実装できます。Content Control(アクティブインストール4万以上・継続的にメンテナンスされている)は、ログイン状態やユーザーロールに基づいてコンテンツを制御できる代表的なプラグインです。

「Restrict Content」はKadence Membershipsに改称
以前よく紹介されていた「Restrict Content」プラグインは、開発元の変更にともない「Kadence Memberships」に改称・リブランドされています(プラグインのURLスラッグ自体はrestrict-contentのまま)。導入を検討する場合は、現在のレビュー評価やサポート状況を確認してから選んでください。

よくある質問(FAQ)

Qログインユーザーだけに特定のコンテンツを表示するコードは?
Aif(is_user_logged_in()){ /* ログイン済みコンテンツ */ }else{ /* 未ログインメッセージ */ }という基本的な条件分岐で実装できます。ページキャッシュを使っている場合は、対象ページをキャッシュから除外することも検討してください。
Q特定のロール(例: subscriber)以上にのみコンテンツを表示するには?
Acurrent_user_can(‘read’)でsubscriber以上の権限チェックができます(subscriberロールも既定でreadケイパビリティを持つため)。ロール別の表示制御はcurrent_user_can()に各ロールのcapabilityを渡して判定します。
Qショートコードでログイン制限コンテンツを実装するには?
Aadd_shortcode()で[logged_in]コンテンツ[/logged_in]のようなショートコードを作成し、コールバック内でis_user_logged_in()を確認します。未ログイン時の代替メッセージ表示などの発展的な実装はこちらで解説しています。

まとめ

  • 基本is_user_logged_in()での条件分岐
  • 注意:ページキャッシュ環境では判定結果が固定化されるリスクがある
  • 手軽に:ショートコード(詳細は4961で解説)
  • 本格的に:Content Control等のプラグイン

自分のサイトのキャッシュ環境や要件に合わせて、最適な方法を選んでください。