जैसा कि @butlerblog उत्तर में कहा गया है, आपको किसी भूमिका के खिलाफ जांच करने के लिए current_user_can का उपयोग नहीं करना चाहिए
यह नोटिस विशेष रूप से has_cap
फ़ंक्शन के PHP प्रलेखन में जोड़ा जाता है जिसे कहा जाता हैcurrent_user_can
क्षमता के स्थान पर एक भूमिका के खिलाफ जाँच करते समय भाग में समर्थन किया जाता है, यह अभ्यास हतोत्साहित करता है क्योंकि यह अविश्वसनीय परिणाम दे सकता है।
ऐसा करने का सही तरीका उपयोगकर्ता को प्राप्त करना है और $user->roles
इस तरह जांचना है :
if( ! function_exists( 'current_user_has_role' ) ){
function current_user_has_role( $role ) {
$user = get_userdata( get_current_user_id() );
if( ! $user || ! $user->roles ){
return false;
}
if( is_array( $role ) ){
return array_intersect( $role, (array) $user->roles ) ? true : false;
}
return in_array( $role, (array) $user->roles );
}
}
यहां कुछ हेल्पर फ़ंक्शंस हैं जो मैं ऐसा करने के लिए उपयोग करता हूं (जैसा कि कभी-कभी मैं केवल वर्तमान उपयोगकर्ता नहीं चाहता हूं):
if( ! function_exists( 'current_user_has_role' ) ){
function current_user_has_role( $role ){
return user_has_role_by_user_id( get_current_user_id(), $role );
}
}
if( ! function_exists( 'get_user_roles_by_user_id' ) ){
function get_user_roles_by_user_id( $user_id ) {
$user = get_userdata( $user_id );
return empty( $user ) ? array() : $user->roles;
}
}
if( ! function_exists( 'user_has_role_by_user_id' ) ){
function user_has_role_by_user_id( $user_id, $role ) {
$user_roles = get_user_roles_by_user_id( $user_id );
if( is_array( $role ) ){
return array_intersect( $role, $user_roles ) ? true : false;
}
return in_array( $role, $user_roles );
}
}
तो आप बस यह कर सकते हैं:
current_user_has_role( 'editor' );
या
current_user_has_role( array( 'editor', 'administrator' ) );
if( current_user_can('editor') || current_user_can('administrator') )