ユーザーが特定の役割を果たしているかどうかを確認するにはどうすればよいですか?
6 回答
- 投票
-
- 2010-12-08
現在のユーザーにのみこれが必要な場合
current_user_can()
は役割と機能の両方を受け入れます.更新:役割名を
current_user_can()
に渡すと、正しく機能することが保証されなくなりました(#22624 ).代わりに、ユーザーの役割を確認することをお勧めします:$user = wp_get_current_user(); if ( in_array( 'author', (array) $user->roles ) ) { //The user has the "author" role }
If you only need this for current user
current_user_can()
accepts both roles and capabilities.UPDATE: Passing a role name to
current_user_can()
is no longer guaranteed to work correctly (see #22624). Instead, you may wish to check user role:$user = wp_get_current_user(); if ( in_array( 'author', (array) $user->roles ) ) { //The user has the "author" role }
-
私はこの投稿がずっと前に答えられていることを知っていますが、誰かがここにたまたま来たら... current_user_can()のドキュメントをもう一度見てください->「これは保証されていないので、current_user_can()にロール名を渡さないでください正しく機能します(#22624を参照).代わりに、AppThemesによってまとめられたユーザーロールのチェック機能を試してみることをお勧めします.」(http://codex.wordpress.org/Function_Reference/current_user_can)I know this post is answered a long time ago but if someone happens to get here... look at the documentation once more for current_user_can() -> "Do not pass a role name to current_user_can(), as this is not guaranteed to work correctly (see #22624). Instead, you may wish to try the check user role function put together by AppThemes." (http://codex.wordpress.org/Function_Reference/current_user_can)
- 10
- 2014-01-28
- bestprogrammerintheworld
-
^ifステートメントに角かっこがありません^ There is a bracket missing in the if statement
- 1
- 2015-06-04
- Aajahid
-
@Aajahid編集:)@Aajahid edited :)
- 1
- 2015-06-04
- Rarst
-
マルチサイトを使用しない場合でも、 `current_user_can( 'editor')`のシンプルさを好みますIf not using multisite, I still prefer the simplicity of `current_user_can('editor')`
- 1
- 2020-01-25
- Jules
-
- 2012-06-11
ユーザーの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 ) ); }
I was looking for a way to get a user's role using the user's id. Here is what I came up with:
function get_user_roles_by_user_id( $user_id ) { $user = get_userdata( $user_id ); return empty( $user ) ? array() : $user->roles; }
Then, an
is_user_in_role()
function could be implemented like so:function is_user_in_role( $user_id, $role ) { return in_array( $role, get_user_roles_by_user_id( $user_id ) ); }
-
ユーザーに割り当てられた最初の役割を取得するのに問題なく機能します.works fine for me to get the first role assigned to a user.
- 1
- 2012-10-10
- Q Studio
-
ユーザーに割り当てられたすべての役割はどうですか?What about all the roles assigned to the user?
- 0
- 2017-04-10
- Sahu V Kumar
-
@Vishal Kumarこれは、ユーザーに割り当てられたすべてのロールに対してチェックします.@Vishal Kumar this will check against all roles assigned to the user.
- 1
- 2017-04-10
- Stephen M. Harris
-
この関数は存在しません.古いものかどうかはわかりませんが、上記の回答または以下に投稿した回答を使用する必要があります.This function does not exist, not sure if it was just old or what, but you should use the answer above or the one I posted below
- 0
- 2017-11-16
- sMyles
-
- 2017-11-16
新しいユーザーオブジェクトを作成することもできます:
$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
が削除されたかはわかりませんが、使用できる関数ではなくなりました.You can also just create a new user object:
$user = new WP_User( $user_id ); if ( ! empty( $user->roles ) && is_array( $user->roles ) && in_array( 'Some_role', $user->roles ) ) { return true; }
Not sure what version
get_user_roles_by_user_id
was removed in, but it's no longer an available function.-
これは、WP_Userクラスの他のメソッドを呼び出す必要がある場合に便利です.This is handy when I have to call other methods of the WP_User class.
- 0
- 2019-09-25
- Justin Waulters
-
- 2017-11-28
柔軟性を高めるためにユーザーとロールを受け入れる関数は次のとおりです.
関数my_has_role($ user、$ role){ $ロール=$ user->ロール; in_array($ role、(array)$ user-> roles);を返します. } if(my_has_role($ user、 'some_role')){ //何かをする }
Here is a function that accepts a user and role for greater flexibility:
function my_has_role($user, $role) { $roles = $user->roles; return in_array($role, (array) $user->roles); } if(my_has_role($user, 'some_role')) { //do stuff }
-
- 2019-10-02
ユーザーオブジェクト
で現在のユーザーIDを取得できます.$user->roles
でロールを呼び出すと、すべてのロールが返されるわけではありません.ユーザーが役割または機能を持っているかどうかを確認する正しい方法は次のとおりです.(これはwpバージョン2.0.0以降で機能します.)次の関数はユーザーIDで機能し、$current_user_id = get_current_user_id();
/** * Returns true if a user_id has a given role or capability * * @param int $user_id * @param string $role_or_cap Role or Capability * * @return boolean */ function my_has_role($user_id, $role_or_cap) { $u = new \WP_User( $user_id ); //$u->roles Wrong way to do it as in the accepted answer. $roles_and_caps = $u->get_role_caps(); //Correct way to do it as wp do multiple checks to fetch all roles if( isset ( $roles_and_caps[$role_or_cap] ) and $roles_and_caps[$role_or_cap] === true ) { return true; } }
Calling roles on User Object
$user->roles
do not return all the roles. The correct way to find if the user has a role or capability is following. (This works in wp version 2.0.0 and greater.) The following function works with user id you can get the current user id by$current_user_id = get_current_user_id();
/** * Returns true if a user_id has a given role or capability * * @param int $user_id * @param string $role_or_cap Role or Capability * * @return boolean */ function my_has_role($user_id, $role_or_cap) { $u = new \WP_User( $user_id ); //$u->roles Wrong way to do it as in the accepted answer. $roles_and_caps = $u->get_role_caps(); //Correct way to do it as wp do multiple checks to fetch all roles if( isset ( $roles_and_caps[$role_or_cap] ) and $roles_and_caps[$role_or_cap] === true ) { return true; } }
-
- 2020-07-27
これは古い投稿ですが、これがすべてのWordPressバージョンで機能する1つのユニバーサル関数です.
if(!function_exists('is_user')): function is_user ($role=NULL, $user_id=NULL) { if(empty($user_id)){ $user = wp_get_current_user(); } else { if(is_numeric($user_id) && $user_id == (int)$user_id) { $user = get_user_by('id', (int)$user_id); } else if(is_string($user_id) && $email = sanitize_email($user_id)) { $user = get_user_by('email', $email); } else { return false; } } if(!$user) return false; return in_array( $role, (array)$user->roles, true ) !== false; } endif;
この機能を使用すると、ログインしているユーザーをロールまたはユーザーID/メールで検索できます.ユーザーロール配列も受け入れます.
This is old post but here is one universal function what working on the all WordPress versions.
if(!function_exists('is_user')): function is_user ($role=NULL, $user_id=NULL) { if(empty($user_id)){ $user = wp_get_current_user(); } else { if(is_numeric($user_id) && $user_id == (int)$user_id) { $user = get_user_by('id', (int)$user_id); } else if(is_string($user_id) && $email = sanitize_email($user_id)) { $user = get_user_by('email', $email); } else { return false; } } if(!$user) return false; return in_array( $role, (array)$user->roles, true ) !== false; } endif;
With this function you can search logged in user by role or by user ID/email. Also accept user roles array.
現在のユーザーの役割に基づいて、ユーザープロファイルページのフィールドラベルに異なるテキストを表示するという非常に具体的な要件があります.現在の使用が「作者」であるかどうかを確認する方法がわからないようです.
次のような関数を探しています:
これは非常に簡単だと思いますが、答えがないまま検索が長すぎたので、ここに投稿しようと思いました.