web-dev-qa-db-ja.com

ユーザーが特定のロールにしているかどうかを確認する方法

現在のユーザーの役割に基づいて、ユーザープロファイルページのフィールドラベルに異なるテキストを表示するという、かなり具体的な要件があります。現在の使用が「作者」であるかどうかを確認する方法を理解することはできません。

私はのような機能を探しています:

is_user_in_role($user, "author");

これは非常に単純なことだと思いますが、答えがないまま長い間探しすぎたので、ここに投稿することにしました。

53
jessegavin

現在のユーザーだけに必要な場合は current_user_can() はロールと機能の両方を受け入れます。

_ update _ current_user_can()にロール名を渡しても正しく動作することは保証されなくなりました( #22624 を参照)。代わりに、あなたはユーザロールをチェックしたいかもしれません:

$user = wp_get_current_user();
if ( in_array( 'author', (array) $user->roles ) ) {
    //The user has the "author" role
}
101
Rarst

ユーザーのIDを使用してユーザーの役割を取得する方法を探していました。これが私が思いついたものです:

function get_user_roles_by_user_id( $user_id ) {
    $user = get_userdata( $user_id );
    return empty( $user ) ? array() : $user->roles;
}

そうすれば、is_user_in_role()関数は次のように実装できます。

function is_user_in_role( $user_id, $role  ) {
    return in_array( $role, get_user_roles_by_user_id( $user_id ) );
}
9

新しいユーザーオブジェクトを作成することもできます。

$user = new WP_User( $user_id );

if ( ! empty( $user->roles ) && is_array( $user->roles ) && in_array( 'Some_role', $user->roles ) ) {
    return true;
}

どのバージョンのget_user_roles_by_user_idが削除されたのかはわかりませんが、使用できなくなりました。

1
sMyles

これは、柔軟性を高めるためにユーザーとロールを受け入れる関数です。

 function my_has_role($ user、$ role){
 $ roles = $ user-> roles; 
 in_array($ role、(array)$ user-> roles); 
} 
 
 if(my_has_role($ user、 'some_role')){ 
 //何をするか
} 
0
Ben