会員限定コンテンツや社内向けのサイトでは、ログインしているユーザーのみに見せたい情報を記事一覧に表示する場面があります。たとえば「編集用メモ」や「社内資料へのリンク」、「投稿のステータス情報」などを、一般ユーザーには見せず、ログインユーザーのみに限定して表示したい場合です。
この記事では、WordPressのループ内でログイン状態を判定し、ログインユーザーにのみ特定の項目を表示する方法を紹介します。
is_user_logged_in() を使って条件分岐する
WordPressには is_user_logged_in() という関数があり、ログイン中かどうかを簡単に判定できます。
実装例:記事一覧でログインユーザーに「社内メモ」を表示
以下は記事一覧(index.php や archive.php)などで使えるコード例です。
<?php if (have_posts()) : ?>
<ul class="post-list">
<?php while (have_posts()) : the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<?php
// ログインユーザーだけに表示する項目
if (is_user_logged_in()) :
// カスタムフィールドや任意の内容をここに記述
$internal_note = get_post_meta(get_the_ID(), 'internal_note', true);
if (!empty($internal_note)) :
?>
<div class="internal-note">
<strong>社内メモ:</strong><?php echo esc_html($internal_note); ?>
</div>
<?php
endif;
endif;
?>
</li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
応用:HTML構造を変えて非ログインユーザーに空白を見せないようにする
ログインしていないユーザーには項目自体をレンダリングしないようにすることで、無駄な空要素を省き、表示もすっきりさせることができます。
注意点
- is_user_logged_in() はフロントエンドでも使用可能ですが、キャッシュ系プラグインを使っている場合は注意(ログイン・非ログインで表示を切り替えると、キャッシュに誤差が生じる可能性あり)。
- 上記例で使用している get_post_meta() によるカスタムフィールド取得は、ACFなどで入力された値にも対応できます。
まとめ
WordPressでは、is_user_logged_in() を使うことで、記事一覧内でもログインユーザー専用の情報を表示する処理が簡単に実現できます。セキュリティ面にも配慮しつつ、ユーザーの閲覧環境に応じた柔軟な表示制御をしていきましょう。