webコンテンツを徹底強化!WordPressサイト制作とプラグイン&テーマ情報・メンテ/エラー対応から、PHP/CSS/javascript、動画・音・イラスト等制作まで扱うコラム
マルチメディアコンテンツ制作読んどけ☆コラム

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

      2021/02/23

【ユーザーデータ取得】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・ネットショップ・ダウンロード販売サイト・会員コンテンツ などの場合は活用できますので、ぜひチェック・挙動確認してみてください。


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

  関連記事

【WordPressで覚えよう】PHP「->」(オブジェクト演算子/アロー演算子)・「=>」(ダブルアロー演算子)の違い

今回は、管理人もPHP学習し始めのときは混同していた、PHPの演 ...

【超危険】WordPressデータベースリビジョンお掃除

今回は、WordPressのリビジョンが、データベースに大量にた ...

【PHP】カウントダウン機能に使える?array_reverseで配列要素を逆に,パラメーター挙動&array_flipとの違い

今回は、管理人がYouTubeData APIの、order=d ...

YouTube Data APIを使って、PHPで『タイトル・動画id・サムネイル画像』などを取得してみる(Search: listリソース)

今回は、youtubeとwebサイト連携で、YouTube Da ...

テスト環境(ローカル含む)でPHPサイト開発に使えるツール&xamppでやってみた例(設定や表示ファイルetc)

今回は、管理人がサイトに、ちょっとした機能を実装しようとしていた ...

WordPress一覧表示で、特定のカテゴリ/投稿を表示しないようにするには?→category_not_in・post_not_inで

今回は、WordPressの公式フォーラムを見ていたら、『一覧か ...

WordPress・REST APIのjsonファイルにカスタムフィールドを入れ、タイトル・アイキャッチと共に外部サイトで取得・表示

今回は、管理人がWPで作ったサイトのコンテンツを、別の自社運営サ ...