यदि उपयोगकर्ता किसी विशिष्ट भूमिका में है तो कैसे जांचें?


59

मुझे वर्तमान उपयोगकर्ता की भूमिका के आधार पर उपयोगकर्ता प्रोफ़ाइल पृष्ठ पर फ़ील्ड लेबल में अलग-अलग पाठ दिखाने के लिए बहुत विशिष्ट आवश्यकता है। मुझे यह पता नहीं लग सकता है कि कैसे जांच करें कि वर्तमान उपयोग एक "लेखक" है।

मैं एक समारोह की तरह देख रहा हूँ:

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 देखें)। इसके बजाय, आप AppThemes द्वारा एक साथ रखे गए उपयोगकर्ता भूमिका की जांच करने की कोशिश कर सकते हैं। " ( codex.wordpress.org/Function_Reference/current_user_can )
बेस्टप्रोग्राममेनिथवर्ल्ड

1
^ अगर स्टेटमेंट में एक ब्रैकेट गायब है
Aajahid

1
@ अजाहिद ने संपादित किया :)
रार्स्ट

10

मैं उपयोगकर्ता की आईडी का उपयोग करके उपयोगकर्ता की भूमिका प्राप्त करने का एक तरीका ढूंढ रहा था। यहां वह है जो मैंने जुटाया:

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
एक उपयोगकर्ता को पहली भूमिका सौंपे जाने के लिए मेरे लिए ठीक काम करता है।
Q स्टूडियो 19

उपयोगकर्ता को सौंपी गई सभी भूमिकाओं के बारे में क्या?
विशाल कुमार साहू

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को हटाया गया था, लेकिन यह अब उपलब्ध फ़ंक्शन नहीं है।


यह तब आसान है जब मुझे WP_User वर्ग के अन्य तरीकों को कॉल करना है।
जस्टिन वुल्फर्स

0

यहाँ एक फ़ंक्शन है जो एक उपयोगकर्ता और अधिक लचीलेपन के लिए भूमिका स्वीकार करता है:

फ़ंक्शन my_has_role ($ उपयोगकर्ता, $ भूमिका) {
  $ भूमिकाएँ = $ उपयोगकर्ता-> भूमिकाएँ; 
  वापसी in_array ($ भूमिका, (सरणी) $ उपयोगकर्ता-> भूमिकाएँ);
}

अगर (my_has_role ($ उपयोगकर्ता, 'some_role')) {
  //कार्य करना
}

0

उपयोगकर्ता ऑब्जेक्ट पर भूमिकाओं को कॉल $user->rolesकरना सभी भूमिकाओं को वापस नहीं करता है। यह पता लगाने का सही तरीका है कि क्या उपयोगकर्ता की कोई भूमिका या क्षमता है या नहीं। (यह wp संस्करण २.०.० और उससे अधिक में काम करता है।) निम्न फ़ंक्शन उपयोगकर्ता आईडी के साथ काम करता है जिससे आप वर्तमान उपयोगकर्ता आईडी प्राप्त कर सकते हैं$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;
       }
 }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.