কোনও ব্যবহারকারী কোনও নির্দিষ্ট ভূমিকায় আছে কিনা তা কীভাবে পরীক্ষা করবেন?


59

বর্তমান ব্যবহারকারীর ভূমিকার উপর ভিত্তি করে ব্যবহারকারীর প্রোফাইল পৃষ্ঠায় একটি ফিল্ড লেবেলে বিভিন্ন পাঠ্য প্রদর্শন করার জন্য আমার বেশ নির্দিষ্ট প্রয়োজন requirement বর্তমানের ব্যবহারটি "লেখক" কিনা তা যাচাই করবেন কীভাবে আমি তা অনুভব করতে পারি না।

আমি যেমন একটি ফাংশন খুঁজছি:

is_user_in_role($user, "author");

আমি ধারণা করি এটি বেশ সহজ, তবে আমি উত্তর ছাড়াই খুব দীর্ঘ সময় অনুসন্ধান করেছি তাই আমি ভেবেছিলাম এটি এখানে পোস্ট করব।

উত্তর:


113

আপনার যদি কেবলমাত্র বর্তমান ব্যবহারকারীদের জন্য এটির প্রয়োজন হয় তবে 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
}

10
আমি জানি এই পোস্টটির উত্তর অনেক আগেই দেওয়া হয়েছিল তবে কেউ যদি এখানে আসার ঘটনা ঘটে ... কারেন্ট_উসার_কেন () -> "কারেন্ট_উজার_ক্যান () এর জন্য কোনও ভূমিকা নাম পাস করবেন না, কারণ এটির গ্যারান্টি নেই সঠিকভাবে কাজ করুন (দেখুন # 22624) Instead ( Codex.wordpress.org/Function_Reference/current_user_can )
bestprogrammerintheworld

1
If

1
@ আজাহিদ সম্পাদিত :)
রাস্ট

10

আমি ব্যবহারকারীর আইডি ব্যবহার করে কোনও ব্যবহারকারীর ভূমিকা পাওয়ার উপায় খুঁজছিলাম was আমি এখানে যা এলাম:

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

1
কোনও ব্যবহারকারীর কাছে প্রথম ভূমিকা অর্পণ করতে আমার পক্ষে ভাল কাজ করে works
কিউ স্টুডিও

ব্যবহারকারীর জন্য নির্ধারিত সমস্ত ভূমিকা সম্পর্কে কী?
বিশাল কুমার সাহু

1
@ বিশাল কুমার এটি ব্যবহারকারীর কাছে অর্পিত সমস্ত ভূমিকার বিপরীতে পরীক্ষা করবে।
স্টিফেন এম হারিস

এই ফাংশনটি বিদ্যমান নেই, নিশ্চিত না যে এটি সবেমাত্র পুরানো ছিল বা কী, তবে আপনার উপরের উত্তরটি ব্যবহার করা উচিত বা আমি নীচে পোস্ট করা উত্তরটি ব্যবহার করুন
sMyles

2

আপনি কেবল একটি নতুন ব্যবহারকারী অবজেক্ট তৈরি করতে পারেন:

$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সরানো হয়েছে তা নিশ্চিত নয় তবে এটি আর উপলভ্য ফাংশন নয়।


যখন ডাব্লুপি_উজার ক্লাসের অন্যান্য পদ্ধতিগুলি কল করতে হয় তখন এটি কার্যকর।
জাস্টিন ওয়েল্টারস

0

এখানে একটি ফাংশন যা কোনও ব্যবহারকারীকে গ্রহণ করে এবং আরও নমনীয়তার জন্য ভূমিকা:

আমার_হাস_রোল ($ ব্যবহারকারী, $ ভূমিকা) function ফাংশন করুন
  les ভূমিকা = $ ব্যবহারকারী-> ভূমিকা; 
  in_array ($ ভূমিকা, (অ্যারে) $ ব্যবহারকারী-> ভূমিকা) প্রত্যাবর্তন করুন;
}

যদি (আমার_হাস_রোল ($ ব্যবহারকারী, 'কিছু_রোল')) {
  // স্টাফ করুন
}

0

ইউজার অবজেক্টে রোলিং রোলগুলি $user->rolesসমস্ত ভূমিকা ফিরিয়ে দেয় না। ব্যবহারকারীর ভূমিকা বা দক্ষতা রয়েছে কিনা তা খুঁজে পাওয়ার সঠিক উপায়টি অনুসরণ করা হচ্ছে। (এটি ডাব্লুপিপি সংস্করণ ২.০.০ এবং আরও বেশি ক্ষেত্রে কাজ করে)) নিম্নলিখিত ফাংশনটি ব্যবহারকারীর আইডির সাথে কাজ করে আপনি বর্তমান ব্যবহারকারী আইডি মাধ্যমে পেতে পারেন$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;
       }
 }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.