1. ホーム
  2. WordPress

【WordPress】is_user_logged_in と wp_get_current_user の使い方|ログイン状態とユーザー情報を扱う

Share

「ログインしている人にだけ特別なメニューを表示したい」「ログイン中のユーザー名を画面に出したい」——会員制サイトや管理機能を作るとき、こうした処理は欠かせません。WordPress では、ログインしているかどうかを調べる is_user_logged_in() と、ログイン中のユーザー情報を取得する wp_get_current_user() を使えば簡単に実現できます。この記事では、この2つの関数の使い方、ユーザー情報の取り出し方、ログイン状態による表示の出し分け、つまずきやすいポイントまで、初心者の方にも分かるように解説します。

ログイン状態とユーザー情報を扱う関数

まずは、それぞれの関数が「何を返すか」を整理しましょう。ログインしているかの判定と、ログイン中のユーザーの情報取得は別の関数が担当します。

関数返すもの
is_user_logged_in()ログイン中なら true、未ログインなら false
wp_get_current_user()現在のユーザーの情報(WP_User オブジェクト)
get_current_user_id()現在のユーザーの ID(未ログインなら 0)

is_user_logged_in でログイン状態を調べる

is_user_logged_in() は、訪問者がログインしていれば true、していなければ false を返します。引数は不要で、if 文に渡すだけで表示を切り替えられます。

テンプレート
<?php if ( is_user_logged_in() ) : ?>
  <p>ようこそ、会員ページへ。</p>
<?php else : ?>
  <p><a href="<?php echo wp_login_url(); ?>">ログイン</a>してください。</p>
<?php endif; ?>

このように、ログインしている人とそうでない人で表示を出し分けるのが基本の使い方です。会員限定のコンテンツや、ログイン・ログアウトのリンクの切り替えなどに活用できます。

wp_get_current_user でユーザー情報を取得する

ログイン中のユーザーの名前やメールアドレスを使いたいときは wp_get_current_user() を呼びます。返ってくるのは WP_User というオブジェクトで、そこから各情報をプロパティとして取り出します。

テンプレート
<?php
$user = wp_get_current_user();

echo esc_html( $user->display_name ); // 表示名
echo esc_html( $user->user_email );   // メールアドレス
echo (int) $user->ID;                 // ユーザーID

よく使うプロパティを表にまとめます。出力するときは、安全のため esc_html() でエスケープするのを忘れないようにしましょう。

プロパティ内容
IDユーザーID
display_name画面に表示される名前
user_loginログイン用のユーザー名
user_emailメールアドレス
roles権限グループ(配列)

ユーザーID だけが必要なとき

名前やメールは不要でユーザーID だけを使いたい場合は、get_current_user_id() が手軽です。オブジェクトを取得してプロパティを読むより簡潔に書けます。取得した ID は、その人の投稿を取得したり、ユーザーメタを読み書きしたりするのに使えます。

テンプレート / functions.php
<?php
$user_id = get_current_user_id();

if ( $user_id ) {
    // ログイン中のユーザーの投稿数を取得する例
    $count = count_user_posts( $user_id );
    echo "あなたの投稿数: " . (int) $count;
}

権限(ロール)で表示を分ける

「管理者にだけ表示する」のように権限で分けたいときは、ロール名を直接見るより current_user_can()権限(capability)を確認するのが確実です。ロール名は変更・追加されることがあるため、「何ができるか」で判定する方が安全です。

テンプレート
<?php
// 管理者など「設定を変更できる」権限を持つ人にだけ表示
if ( current_user_can( 'manage_options' ) ) {
    echo '<a href="' . admin_url() . '">管理画面へ</a>';
}

うまく取得できないときの注意点

未ログインでも空のオブジェクトが返る

wp_get_current_user() は、未ログインのときでも null ではなくID が 0 の空のユーザーオブジェクトを返します。そのため、オブジェクトが返ってきたかどうかでログイン判定をしてはいけません。ログインしているかを調べるときは、必ず is_user_logged_in() か、ID が 0 でないかを確認してください。

テンプレート
<?php
$user = wp_get_current_user();

// NG: 未ログインでもオブジェクトは返るので常に true になりがち
// if ( $user ) { ... }

// OK: ID が 0 でないかで判定する
if ( $user->ID !== 0 ) {
    echo esc_html( $user->display_name );
}

呼び出すタイミングが早すぎる

現在のユーザー情報は、WordPress の初期化が進んだ段階で確定します。functions.php の冒頭など早すぎるタイミングで呼ぶと、正しく取得できないことがあります。ユーザー情報を使う処理は、init 以降のフックの中やテンプレート内で実行するようにしましょう。

まとめ

ログイン状態とユーザー情報の取得は、会員機能づくりの基本です。要点を整理します。

  • ログイン判定は is_user_logged_in()(true / false)。
  • ユーザー情報は wp_get_current_user() で WP_User オブジェクトを取得し、display_name などを読む。
  • ID だけなら get_current_user_id() が手軽(未ログインは 0)。
  • 権限での出し分けは current_user_can() を使う。
  • wp_get_current_user() は未ログインでも空オブジェクトを返すので、判定は is_user_logged_in() で行う。

「判定は is_user_logged_in()、情報取得は wp_get_current_user()、権限は current_user_can()」と役割で覚えておくと、会員向けの表示制御がすっきり書けます。出力時のエスケープも忘れずに行いましょう。

参考ページ