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

                    更新: 2021/02/23   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サイト制作&リニューアル・機能開発サービス | アトリエSS


【カテゴリ】 - PHP・データベースetc
【タグ】 - , , , ,

  関連記事

【超危険】WordPressデータベースリビジョンお掃除
【PHP etc.プログラム学習サイトコードコピペ】全角引用符・バッククオートが入ってて動かない件に注意
【ユーザーデータ取得】WordPress定義済み関数の『get_userdata()』『wp_get_current_user()』ってどのように違うの?
【WP記事取得クエリ・プラグイン無し】お知らせなどに使える、ショートコードで特定カテゴリ記事を表示プログラム
WordPress記事一覧ページの『本文からの抜粋』を表示する関数と、その文字数の調整方法をチェックする
【WordPressカスタムフィールド検索】meta_queryで、シリアライズ値が入ったフィールドを持つ記事をヒットさせるには?
YouTube Data APIを使って、PHPで『タイトル・動画id・サムネイル画像』などを取得してみる(Search: listリソース)
WordPress一覧表示で、特定のカテゴリ/投稿を表示しないようにするには?→category_not_in・post_not_inで
【WPカスタマイズ】プラグイン不使用、テーマに関連記事表示機能を実装しPV・滞在時間を上げる
【WordPress条件分岐】is_singleとis_singularって違うの?→idやスラッグ指定、投稿タイプ指定の面で違いが
【PHP】GD・ImageFilterで、画像の色合いを変えてみる
【PHPプログラミング】メモ帳に適当にメモったPV数値をexplodeで配列にし、array_sumで合計値を計算する