उपयोगकर्ता की भूमिका कैसे प्राप्त करें


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
)

धन्यवाद @toscho - मुझे वह नहीं मिला जो मैं उम्मीद कर रहा था। मुझे एक संपादक, एक खाली / अशक्त मान और bbp_participant मिला। मैं व्यवस्थापक, संपादक, लेखक या सब्सक्राइबर को देखने की उम्मीद कर रहा था क्योंकि वे केवल वही भूमिकाएं हैं जिनका हम उपयोग कर रहे हैं।
फ्रैंक 13

@ frank13 मेरा अपडेट देखें।
FUXIA

2
धन्यवाद @toscho ... कि डेटा मान प्राप्त करने के लिए बहुत सारे कोड हैं जो मैंने सोचा होगा कि अधिक आसानी से उपलब्ध होगा।
फ्रैंक 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);

$ भूमिकाएं एक सरणी के रूप में समाप्त होती हैं। मुझे $user->IDभूमिका मिल रही है । हमारे सिस्टम में केवल एक भूमिका के रूप में किसी भी उपयोगकर्ता को 1 से अधिक भूमिका नहीं दी गई है।
फ्रैंक १३

$roles[0], किया हुआ।
क्रिसगुइटारगुई

ठीक है, धन्यवाद @ChristopherDavis ... $ भूमिकाओं [0] रिटर्न "0" बोर्ड में हर उपयोगकर्ता के लिए सूची में है
frank13

@chrisguitarguy $ भूमिकाओं [0] अभी भी काम करता है?
टोडुआ

0

जैसा कि मैं समझता हूं, यह शायद वर्षों में बदल गया, अब यह नहीं है 'wp_capabilities'। मैंने कोर WP फाइलों को देखा, वे इसे अब कैसे करते हैं, और इसके लिए एक नया समाधान मिला। अब मैं जिस कोड का उपयोग कर रहा हूं:

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इस सटीक पैरामीटर की जाँच करने के लिए सीधे db पर जाता है, इसलिए यह सबसे तेज़ और संसाधन-वार मार्ग होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.