@ বুটারব্লগের উত্তরে যেমন বলা হয়েছে, কোনও ভূমিকার বিপরীতে আপনার বর্তমান_উজার_ক্যান ব্যবহার করা উচিত নয়
এই নোটিশটি বিশেষত পিএইচপি ডকুমেন্টেশনে যুক্ত করা হয় has_cap
যা দ্বারা ডাকে functioncurrent_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') )