PRESSMAN*Tech

HTML5, CSS3からWordPress, AWS, Elasticsearchまで。プレスマンのスタッフが綴る技術ブログ。

【WordPress】 幾つかのフック内で、ユーザー権限グループが取得できなかったりする

getuserrole
大変ご無沙汰してしまいました。

かなり濃いめのWordpressのカスタマイズ案件を連続で担当しておりました。
リバビリを兼ねて、お仕事案件からのスピンアウト子ネタをご紹介します。

ユーザーの権限グループを取得なんて簡単! のはずが…

検索するとすぐに出てくるスニペットは以下の感じと思います。

$user = wp_get_current_user();
$user_role = array_shift($user->roles);

今まではこれで事足りてましたが、
この方法だと、幾つかのfilterフック内で取得できなかったのです。
たとえば、以下の感じ。

  • ‘admin_init’に引っ掛けた関数内で、○
  • ‘post_row_actions’に引っ掛けた関数内で、×
  • ‘admin_body_class’に引っ掛けた関数内で、×
  • ‘admin_footer’に引っ掛けた関数内で、× …

結構使えない場面が多い…なら、作る

そこで、Userオブジェクトをいろんな場面で出力してみて、これならどこでも取得可能(な筈)!って関数をつくってみました。
$user_id未指定なら、現在のユーザーの権限グループ、指定すれば特定ユーザーの権限グループを返します。

/**
* ユーザーの権限グループを取得
*
* @param int $user_id
* @return string
*/
function pm_get_user_role( $user_id = '' ){
if( $user_id == '' ){
$user = wp_get_current_user();
} else {
$user = new WP_User($user_id);
}
$user_role = array_shift($user->roles);
// got user_role ?
if($user_role == ''){
$user_role = array_keys($user->caps)[0];//try the other way.
}
return $user_role;
}

コメント、アドバイス等々、お待ちしております!

投稿者:hiroshi
hiroshi

hiroshi の紹介

DTP、Webデザイン、プログラミングをへて、サービス企画に。
Wordpressのことなら何でもご相談ください。
このエントリーをはてなブックマークに追加

私たちと一緒に働きませんか?

株式会社プレスマンでは、WordPressが大好きな方、仕事を通してさらにスキルを磨きたい方を募集しています。まずは募集職種をご覧の上、お気軽にお問い合わせください。あなたとお会いできるのを楽しみにしています。

プレスマンの採用情報を見る →

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

▲ 先頭へ戻る