ব্যবহারকারীর ভূমিকা কীভাবে পাওয়া যায়


15

একজন ব্যবহারকারীর সাথে আমার ভূমিকা সম্পর্কিত হওয়া দরকার - "বর্তমানে ব্যবহারকারীদের মধ্যে থাকা লগ ইন" নয়।

আমি বুডপ্রেস ব্যবহার করছি (এটি এই প্রশ্নের প্রকৃতির সাথে বিবেচিত হবে না) এবং আমি bp_members()লুপে আছি ।

আমি যে কোনও সময়ে লুপটিতে যে প্রতিবেদন করছি তার ভূমিকা কীভাবে পুনরুদ্ধার করতে পারি?

ধন্যবাদ।

উত্তর:


17

ব্যবহারকারীর আইডি এবং WP_User:

$user = new WP_User( $user_id );
print wp_sprintf_l( '%l', $user->roles );

হালনাগাদ

/**
 * Get user roles by user ID.
 *
 * @param  int $id
 * @return array
 */
function wpse_58916_user_roles_by_id( $id )
{
    $user = new WP_User( $id );

    if ( empty ( $user->roles ) or ! is_array( $user->roles ) )
        return array ();

    $wp_roles = new WP_Roles;
    $names    = $wp_roles->get_names();
    $out      = array ();

    foreach ( $user->roles as $role )
    {
        if ( isset ( $names[ $role ] ) )
            $out[ $role ] = $names[ $role ];
    }

    return $out;
}

ব্যবহারের উদাহরণ:

print '<pre>' 
    . htmlspecialchars( 
        print_r( wpse_58916_user_roles_by_id(1), TRUE ) 
        ) 
    . '</pre>';

Array
(
    [administrator] => Administrator
)

ধন্যবাদ @ টোসচো - মনে হচ্ছে যা আমি প্রত্যাশা করছিলাম তা আমাকে পেয়েছে না। আমি একটি সম্পাদক পেয়েছি, একটি ফাঁকা / নাল মান এবং বিবিপি_পারসিপসেন্টেন্ট। আমি অ্যাডমিন, সম্পাদক, লেখক বা গ্রাহককে দেখার আশা করছিলাম কারণ সেগুলি কেবলমাত্র আমরা ব্যবহার করছি।
খোলামেলা 13

@ ফ্র্যাঙ্ক 13 আমার আপডেট দেখুন।
ফুসিয়া

2
ধন্যবাদ @ টসচো ... এমন একটি ডেটা মান পাওয়ার জন্য অনেক কোড যা আমি ভেবেছিলাম আরও সহজেই পাওয়া যেত।
খোলামেলা 13

খুব সহায়ক, ধন্যবাদ! এত দু: খজনক এবং বিভ্রান্তিকর, কেন আপনি আরও সরাসরি ব্যবহারকারীর ভূমিকা অ্যাক্সেস করতে পারবেন না। "ব্যবহারকারী" ফাংশনটি বেশিরভাগ লোকেরা যা চান তার বিপরীতে কাজ করে।
মাইক

7

যদি বস্তুর bp_membersএকটি অ্যারে প্রদান WP_Userকরে, প্রত্যেকের rolesএমন একটি সম্পত্তি থাকা উচিত যা ব্যবহারকারীর ভূমিকাগুলির একটি অ্যারে ধারণ করে।

অন্যথায়, আপনি get_user_metaকীটির জন্য ব্যবহার করতে পারেন wp_capabilities, যা role => capabilityজোড়ার একটি অ্যারে ফিরিয়ে দেবে :

<?php
$caps = get_user_meta($user->ID, 'wp_capabilities', true);
$roles = array_keys((array)$caps);

les ভূমিকাগুলি একটি অ্যারে হয়ে শেষ হয়। আমি $user->IDএর ভূমিকা পেতে চাই । আমাদের সিস্টেমে কোনও ব্যবহারকারী হিসাবে কেবল একটি ভূমিকা 1 টিরও বেশি ভূমিকা অর্পণ করা হয়নি।
খোলামেলা 13

$roles[0], সম্পন্ন.
chrisguitarguy

ঠিক আছে, ধন্যবাদ @ ক্রিস্টোফারড্যাভিস ... les ভূমিকা [0] তালিকার প্রতিটি ব্যবহারকারীর জন্য বোর্ড জুড়ে "0" ফিরিয়ে দেয়
খোলামেলা 13

@ chrisguitarguy এখনও ভূমিকা কি [0] কাজ করে?
টুডো

0

আমি বুঝতে পেরেছি, এটি সম্ভবত বছরের পর বছর পরিবর্তিত হয়েছে, এখন তা নয় 'wp_capabilities'। আমি মূল ডাব্লুপি ফাইলগুলিতে তাকালাম, তারা এখন এটি কীভাবে করে এবং এর নতুন সমাধান খুঁজে পেয়েছি। আমি এখন যে কোডটি ব্যবহার করি তা এখানে:

global $wpdb;
$cap = get_user_meta( $wp_user_id, $wpdb->get_blog_prefix() . 'capabilities', true );

$cap তারপরে একটি সহযোগী অ্যারে হিসাবে আসে, উদাহরণস্বরূপ:

{
    "administrator": true
}

অথবা

{
    "subscriber": true
}

সুতরাং আপনার ক্ষেত্রে আপনার পরে সম্ভবত অ্যারের কীগুলি পাওয়া উচিত:

$caps_array = array_keys( $cap );

এবং তারপরে এটি থেকে সমস্ত কিছু পান। ব্যবহারকারীর প্রশাসকের ভূমিকা আছে কিনা তা আমার দেখার দরকার ছিল, তাই আমি যাচাই করেছি:

if ( is_array( $cap ) && !empty( $cap['administrator'] ) ) { return true; }

আমার ব্যবহারকারীর আইডি ছিল, পুরো WP_Userঅবজেক্টটি নয় এবং আমি কোনও সমাধান ব্যবহার করতে চাইনি যা userঅবজেক্টটি তৈরি করবে । আমি যাচাই করেছি, get_user_metaঠিক এই সঠিক পরামিতিটি পরীক্ষা করার জন্য ডিবিতে গিয়েছি , সুতরাং এটি দ্রুত এবং সংস্থান-ভিত্তিক রুট হওয়া উচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.