icon
Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【ユーザーデータ取得】WordPress定義済み関数の『get_userdata()』『wp_get_current_user()』ってどのように違うの?

更新: 2024/02/12 3245文字

【ユーザーデータ取得】WordPress定義済み関数の『get_userdata()』『wp_get_current_user()』ってどのように違うの

今回は、WPシステムのwebサイト制作などでちょくちょくお目にかかる、WordPress定義済み関数の『wp_get_current_user();』『get_userdata();』というのを扱ってみようと思います。どちらも『ユーザーデータ取得』に関係する関数で(なお、このサイトは管理人一人で運営しているので使い道がほとんどありません涙)、用途としては『複数の執筆者がいるサイトやwiki系のサイト』『会員向けコンテンツを提供するサイト』『ショッピング・ダウンロード販売サイト』などと相性がよさそうです。似ていますが、さっそく挙動の違いを確認してみましょう。

WP関数の『get_userdata()』『wp_get_current_user()』とは?

調べたところ、どちらもWPのコアファイル『wp-includes/pluggable.php(プラガブル関数・プラグインなどで機能を上書きできる関数)』で定義されているもののようです(『wp_get_current_user』は68行・『get_userdata』は82行)。

名前の通り、『ユーザー情報取得』に関する関数です。『current』のほうは、英単語の意味の通り現在ログインしてるユーザーについてです。 このサイトでは、別にユーザー登録しなくても全部の記事を読めるようになっているので、使いどころはないんですけど(笑)、WPで『複数の執筆者がいるサイトやwiki系のサイト』『会員向けコンテンツを提供するサイト』『ショッピング・ダウンロード販売サイト』を行っている場合は、利用する可能性が高いでしょう。

■(参考)公式wordpress.orgの、ソース確認できるページ(pluggable.php)
https://core.trac.wordpress.org/browser/tags/5.4/src/wp-includes/pluggable.php

■(参考)wp_get_current_user()について
https://developer.wordpress.org/reference/functions/wp_get_current_user/

■(参考)WordPress Codex 日本語版・プラガブル関数ページ
https://wpdocs.osdn.jp/プラガブル関数

*余談ですが、プラガブル関数ページでは『is_user_logged_in・wp_logout・wp_mail・wp_new_user_notification・wp_redirect』など、使うかもしれないファンクションが紹介されているので、興味がある方は読んでみてください。

『get_userdata()』『wp_get_current_user()』のユーザーデータ取得の挙動はどう違う?

それでは、WP登録ユーザーが自分ひとりだと挙動確認もへったくれもないので、testアカウントを作って確認したいと思います。事前に取得していたtutamail.comのアドレスが役に立ちました。『佐々木てすとだよー』さんに登場いただきましょう。ユーザーidは2番・権限は『購読者』です。

テストの内容としては簡単に『$userinfoに格納し、var_dumpでデータの内容を出力』みたいな方法で行います

『get_userdata()』の挙動~パラメータにid指定で、任意のユーザー情報を取得できる

まずは、『get_userdata()』で、ユーザーデータ取得してみます。『佐々木てすとだよー』さんはid2番なので、このようにパラメータを指定できます。

データが出ましたね。ここから『$user_info->user_login(ログイン用のid)』『$user_info->user_email(登録メルアド)』みたいに、項目を指定して出力したりするのが一般的です。

ちなみに、自分は最初にこのサイトを作ったユーザーなので、idは1番です。自分のデータを取るときはこのようにid1番を指定しました。

『wp_get_current_user()』の挙動~id指定などではなく、現在ログインしているユーザーの情報が出る

次は『wp_get_current_user()』の挙動を確認してみますか。先ほどと同じように『$userinfoに格納し、var_dump』します。なお、これは仕様で、idをパラメータに指定などはしません

英単語の『current』の意味通り、『現在ログイン状態のユーザー情報を取得』するからです。このときブログの執筆や挙動確認で自分がログインしていたので、自分のユーザーデータが表示されました。(メルアドは公開されているものだからバレてもいいんだけど、idが恥ずかしいのでぼかしています笑)

ということは、idを指定したって無意味です(wp_get_current_userでidを指定しても、この時ログインしているid1番の自分の情報が出力される)。id2番のユーザー情報は、2番のユーザーがログインしてるときに出ます。

WPユーザーデータ取得の活用例

(例えばsnsのプロファイルページとかで)ログインしているユーザーの登録情報を表示

<?php $user_info = wp_get_current_user(); echo $user_info->user_email; ?>

(これはログインしているユーザーの登録メルアドを表示します。)

ログインしているユーザーのメルアドで判定して処理を切り替える

<?php $user_info = wp_get_current_user(); if(!preg_match(“/〇〇〇@△△.jp/”, $userinfo->user_email)){ // 登録メルアドが〇〇〇@△△.jpのユーザーのときに何か行う }?>

(権限などのほか、登録メルアド判定にも使えます)

ネットショップ・ダウンロード販売サイトで、ログインしているユーザーアカウント名を出す

<?php if(is_user_logged_in()): ?> <?php global $current_user; echo $current_user->user_login ?> <?php endif; ?>

(グローバル変数$current_userを使ってもよいかも。『こんにちわ〇〇さん』的な表示に。)

あとがき・まとめ

  • WPで登録情報をあつかう関数は『get_userdata()』『wp_get_current_user()』がある
  • 『get_userdata()』はidを指定するなど、任意で取り出せる
  • 『wp_get_current_user()』は、『現在ログインしているユーザー情報』が出るというように、似ているけど挙動が違う
  • ネットショップの『ログインしているユーザーの名前表示』とか、『メルアド取得して特定の文字列で判定』みたいに

といった感じでしょうか。複数人運営メディア・SNS・wiki・ネットショップ・ダウンロード販売サイト・会員コンテンツ などの場合は活用できますので、ぜひチェック・挙動確認してみてください。


【カテゴリ】- WordPressファンクションetc
【タグ】- , , ,

関連記事