【ユーザーデータ取得】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
【タグ】- , , , ,

関連記事

【別に止めなくてOK】WordPressサイトなどに、アメブロ・fc2など無料ブログの更新情報を表示して連携する方法
【画像つきでわかりやすい】WordPressで使われるデータは、MySQLデータベースに、どのように格納されているの?
【PHP】GD・ImageFilterで、画像の色合いを変えてみる
WPデータベースの余計なデータには何がある?事例と対処方法・あるとイヤなケース
【WordPress】記事文字数のカウント方法(コア機能・プラグイン)チェックと、フロントへの出力について
【WordPress組み込み関数】is_home()とis_front_page()って同じ?→似てますが、厳密には挙動が異なります
【PHP/SQLiteでCMS作ってみる】SQLiteデータベース管理ツール『phpLiteAdmin』セットアップや日本語化・テーブル作成やってみた
【PHPライブラリでスクレイピング】PHP Simple HTML DOM Parserで、クラスやID指定で別サイトの内容を取得する方法
【php/pdoクラス】SQLite/phpLiteAdminでデータベース作成&アクセス制限・PDOクラスで記事データ取得してみる
【WordPress更新情報表示】php/wp組み込みファンクション(fetch_feed)で取得と、プラグインで表示どちらが良い?
【webサイトセキュリティ対策】検索フォームへのSQL判定などがある不正な入力を、WAFで遮断する
【PHPプログラミング】ヒアドキュメント構文 (“<<<“)使ってみた例~メール確認画面&入力内容などの変数渡し