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;
}

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

東京都東日本橋の株式会社プレスマンPRESSMAN*Tech