【WordPress】ログインユーザーにだけ表示するコンテンツをショートコードで実装する方法

【WordPress】ログインユーザーにだけ表示するコンテンツをショートコードで実装する方法 WordPress

WordPressでは、ログインユーザーにのみ特定のコンテンツを表示したいというケースがあります。例えば、会員限定の情報や限定資料のリンクなどです。この記事では、ショートコードを使ってログインユーザーにだけ特定の内容を表示する方法を紹介します。

スポンサーリンク

ショートコードの基本的な仕組み

ショートコードは、WordPress記事や固定ページ内で簡単に再利用可能な機能を挿入できる構文です。今回は、ログイン状態を判定し、ログインしている場合のみコンテンツを表示するショートコードを作成します。

functions.phpにショートコードを追加

まずは、以下のコードをテーマのfunctions.phpに追加します。

functions.php:ログイン限定ショートコード
function shortcode_logged_in_only($atts, $content = null) {
  if (is_user_logged_in()) {
    return do_shortcode($content);
  } else {
    return '<p>このコンテンツはログインユーザー限定です。</p>';
  }
}
add_shortcode('member_only', 'shortcode_logged_in_only');

このショートコードは、ログインしていれば中のコンテンツを表示し、未ログインの場合はメッセージを表示します。

使い方の例

記事や固定ページ内で以下のようにショートコードを記述します。

使用例
[member_only]
このコンテンツはログインユーザーだけに表示されます。
[/member_only]

ログインしているユーザーには「このコンテンツはログインユーザーだけに表示されます。」というメッセージが表示され、未ログインのユーザーには「このコンテンツはログインユーザー限定です。」と表示されます。

応用:未ログインユーザー向けのカスタムメッセージ

ログインしていないユーザーにカスタムリンクやログインページへの誘導を表示したい場合は、次のように変更できます。

functions.php:ログイン後に元のページへ戻る実装
function shortcode_logged_in_only_custom($atts, $content = null) {
  if (is_user_logged_in()) {
    return do_shortcode($content);
  } else {
    // ログイン後に元のページへ戻れるようget_permalink()を渡す
    return '<p>このコンテンツは会員限定です。<a href="' . wp_login_url(get_permalink()) . '">ログインはこちら</a></p>';
  }
}
add_shortcode('member_only_custom', 'shortcode_logged_in_only_custom');

このようにすれば、未ログインユーザーをログインページにスムーズに誘導でき、ログイン後は元のページに戻ります。

キャッシュプラグイン・CDNとの干渉に注意
このショートコードのロジックはis_user_logged_in()に依存しており、WP Super Cache・W3 Total Cache・WP Rocketなど主要なキャッシュプラグインはデフォルトでログイン中のユーザーへのキャッシュ配信を回避するため、通常は問題になりません。ただし、Cloudflareの「Cache Everything」のようにWordPressのログインCookieを認識しないエッジ・CDNキャッシュを併用している場合は注意が必要です。ログイン中の編集者がプレビューした際にレンダリングされた限定コンテンツがそのままキャッシュされ、その後アクセスした未ログインの訪問者にも配信されてしまう危険があります。こうした構成を使う場合は、Cookieベースのキャッシュバイパスルールを必ず設定してください。

よくある質問(FAQ)

Qログイン必須コンテンツをショートコードで実装するコードは?
Aadd_shortcode(‘private’, function($atts, $content){ if(!is_user_logged_in()) return ‘<p><a href=”‘.wp_login_url(get_permalink()).'”>ログイン</a>してご覧ください。</p>’; return do_shortcode($content); })と実装します。
Q特定ロール以上のユーザーにのみ表示するには?
Ais_user_logged_in()確認後にcurrent_user_can(‘capability’)でロールを確認します。ただしedit_postsはデフォルトで寄稿者(Contributor)にも付与されているため「投稿者(Author)以上」には限定できません。投稿者以上に限定したい場合はpublish_posts(寄稿者は持たない権限)を使います。
QコンテンツがAjaxで読み込まれる場合もショートコードで保護できますか?
AAjaxハンドラー内でも同様にis_user_logged_in()・check_ajax_referer()で認証確認を行います。JavaScriptだけでの隠蔽は迂回可能なため、サーバーサイドでの確認が必須です。

まとめ

ログインユーザー専用コンテンツの実装は、WordPress標準の関数is_user_logged_in()とショートコードを組み合わせることで簡単に実現可能です。シンプルながらも強力な方法で、会員制サイトや企業内ポータルなど幅広い用途に応用できます。

ロールで表示を絞り込む場合は権限の範囲を正確に確認し、キャッシュプラグインやCDNを使っている場合はログイン状態に応じたキャッシュ制御も忘れずに設定しましょう。