【WordPress】記事一覧でログインユーザーにだけ表示される項目を追加する方法

【WordPress】記事一覧でログインユーザーにだけ表示される項目を追加する方法 WordPress

会員限定コンテンツや社内向けのサイトでは、ログインしているユーザーのみに見せたい情報を記事一覧に表示する場面があります。たとえば「編集用メモ」や「社内資料へのリンク」、「投稿のステータス情報」などを、一般ユーザーには見せず、ログインユーザーのみに限定して表示したい場合です。

この記事では、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() を使うことで、記事一覧内でもログインユーザー専用の情報を表示する処理が簡単に実現できます。セキュリティ面にも配慮しつつ、ユーザーの閲覧環境に応じた柔軟な表示制御をしていきましょう。