wordpressでのスマホ対応webサイト制作・wpプラグイン・PHPプログラム・SNS活用・ 動画・bgmやテーマ曲アレンジまで考えるコラム!

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

      2020/09/18

こんにちは、管理人@SS_mshpです。

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

*アトリエSS・web制作サービスページに移動します。webリニューアル・ロゴ・記事・wordpress化などでお力添えできます。

【カテゴリ】 - PHP・データベースetc, webメディア制作・運用
【タグ】 - , ,

  関連記事

【WordPress組み込み関数】is_home()とis_front_page()って同じ?→似てますが、厳密には挙動が異なります

今回は、WordPressで条件分岐するときによく使われる組み込 ...

【WordPressユーザー名バレ対策】ユーザー名表示からPHP・preg_matchでリダイレクト(wp-json/wp/v2/usersなど)

今回は、WPログインなどにも使われる情報『ユーザー名』が表示され ...

【PHP etc.プログラム学習サイトコードコピペ】全角引用符・バッククオートが入ってて動かない件に注意

今回は、管理人が学習サイトなどでコードを調べていて、4回くらい遭 ...

MySQLデータベースからWordPressテーマ変更・プラグイン停止を行う方法【エラー・管理画面に入れないときに】

今回のお題は、WordPressエラー復旧などに使えるかもしれな ...

【お洒落1ページ型無料WPテーマ】onepressを使ってみてレビュー・特徴やカスタマイズ時のポイント

今回は、WPテーマを調査していて見つけた、良い感じの1ページ型テ ...

WordPressの記事IDで判定して転送~PHP・headerとget_the_IDで対応、the_IDとの挙動の違いも

今回は、前回の『別ディレクトリにWP記事を出す』の続きで、新しい ...

別ディレクトリでの記事の管理・表示を、1つのWordPressを使いまわして対応する方法(プラグイン無しカスタム投稿・wp-blog-header.php)

今回は、別ディレクトリのコーポレート・お仕事サイトの記事管理も、 ...