WordPressでは、ログインユーザーにのみ特定のコンテンツを表示したいというケースがあります。例えば、会員限定の情報や限定資料のリンクなどです。この記事では、ショートコードを使ってログインユーザーにだけ特定の内容を表示する方法を紹介します。
ショートコードの基本的な仕組み
ショートコードは、WordPress記事や固定ページ内で簡単に再利用可能な機能を挿入できる構文です。今回は、ログイン状態を判定し、ログインしている場合のみコンテンツを表示するショートコードを作成します。
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]
ログインしているユーザーには「このコンテンツはログインユーザーだけに表示されます。」というメッセージが表示され、未ログインのユーザーには「このコンテンツはログインユーザー限定です。」と表示されます。
応用:未ログインユーザー向けのカスタムメッセージ
ログインしていないユーザーにカスタムリンクやログインページへの誘導を表示したい場合は、次のように変更できます。
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');
このようにすれば、未ログインユーザーをログインページにスムーズに誘導でき、ログイン後は元のページに戻ります。
このショートコードのロジックは
is_user_logged_in()に依存しており、WP Super Cache・W3 Total Cache・WP Rocketなど主要なキャッシュプラグインはデフォルトでログイン中のユーザーへのキャッシュ配信を回避するため、通常は問題になりません。ただし、Cloudflareの「Cache Everything」のようにWordPressのログインCookieを認識しないエッジ・CDNキャッシュを併用している場合は注意が必要です。ログイン中の編集者がプレビューした際にレンダリングされた限定コンテンツがそのままキャッシュされ、その後アクセスした未ログインの訪問者にも配信されてしまう危険があります。こうした構成を使う場合は、Cookieベースのキャッシュバイパスルールを必ず設定してください。よくある質問(FAQ)
まとめ
ログインユーザー専用コンテンツの実装は、WordPress標準の関数is_user_logged_in()とショートコードを組み合わせることで簡単に実現可能です。シンプルながらも強力な方法で、会員制サイトや企業内ポータルなど幅広い用途に応用できます。
ロールで表示を絞り込む場合は権限の範囲を正確に確認し、キャッシュプラグインやCDNを使っている場合はログイン状態に応じたキャッシュ制御も忘れずに設定しましょう。

