एक वर्डप्रेस साइट पर वर्तमान में उपलब्ध रोल्स की सूची प्राप्त करना?


38

वर्डप्रेस प्लगइन्स लिखते समय अक्सर विकल्पों को सेट करने की आवश्यकता होती है जिसके लिए साइट पर कुछ निश्चित कार्यक्षमता या सामग्री तक भूमिकाएं होती हैं। ऐसा करने के लिए एक प्लगइन देव को उन भूमिकाओं की सूची प्राप्त करने की आवश्यकता है जो विकल्प में उपयोग करने के लिए साइट पर मौजूद हैं। क्योंकि कस्टम भूमिकाएँ बनाई जा सकती हैं इसलिए हम यह नहीं मान सकते कि डिफ़ॉल्ट भूमिकाएँ केवल उपलब्ध हैं।

सूची लाने का सबसे अच्छा तरीका क्या है?


6
नोट: यह सवाल मूल रूप से wp-hackers मेलिंग लिस्ट पर Ryan Bilesky द्वारा पूछा गया था और मेरे द्वारा उत्तर दिया गया था। मैंने इसे यहां जोड़ा क्योंकि यह सबसे अच्छा अभ्यास प्रश्न का एक स्पष्ट मामला है जो लोग Google से पूछ सकते हैं :)
jerclarke

1
हे @ जेरेमी क्लार्क - वास्तव में यहां आपकी भागीदारी के लिए खुशी है और ये ठीक उसी प्रकार की चीजें हैं जो हम यहां देख रहे हैं; सामान्य प्रश्नों से संबंधित उत्तर जो सर्वोत्तम प्रथाओं को भी प्रकट कर सकते हैं। कुडोस!
23

जवाबों:


47

भूमिकाओं को वैश्विक चर में संग्रहित किया जाता है $wp_roles

आदर्श कार्यget_editable_roles() से है/wp-admin/includes/user.php

function get_editable_roles() {
    global $wp_roles;

    $all_roles = $wp_roles->roles;
    $editable_roles = apply_filters('editable_roles', $all_roles);

    return $editable_roles;
}

"संपादन योग्य" हिस्सा है क्योंकि यह अन्य प्लगइन्स मामले किसी अन्य में सूची फ़िल्टर करने से व्यवस्थापक है एक मौका प्रदान करता है 'edit_users'विशेषाधिकार (और इस प्रकार 'व्यवस्थापक' जरूरतों को सूची से हटा दिया जाना चाहिए, और है कि उपयोगकर्ता के लिए खुद को व्यवस्थापक बन सकता है)। भूमिका प्रबंधन प्लगइन्स कस्टम भूमिकाएँ बनाने के लिए उपयोग किए जाते हैं जो उस फ़िल्टर का उपयोग करेंगे। अन्यथा यह फ़ंक्शन अनिवार्य रूप से है get_roles() (जो मौजूद नहीं है)

संभवत: आपका प्लग-इन केवल उस सेटिंग पृष्ठ को प्रस्तुत करेगा, जिसमें कोई व्यवस्थापक-स्तरीय क्षमताएं हों, जैसे 'manage_options'कि मूल रूप से सभी भूमिकाओं तक पहुंच वाले व्यवस्थापक हों, इसलिए फ़िल्टर आपको प्रभावित नहीं करना चाहिए।

वहाँ भी हैwp_dropdown_roles() जो आपको <option>एक <select>सूची के लिए फ़ील्ड के रूप में भूमिकाएं देता है (हालांकि चेकबॉक्स कई परिदृश्यों में बेहतर काम करने की संभावना रखते हैं जहां आप चुन रहे हैं कि किसके पास कुछ है)


3
नोट: मैंने WP को अधिक सुरक्षित बनाने के लिए इस फ़ंक्शन को पैच के हिस्से के रूप में बनाया है, इसलिए मैं इसके पक्ष में पक्षपाती हूं;)
jerclarke

14

इसे इस्तेमाल करे:

function get_role_names() {

global $wp_roles;

if ( ! isset( $wp_roles ) )
    $wp_roles = new WP_Roles();

return $wp_roles->get_names();
}

पीएस हे, उस स्पष्टीकरण और उत्तर को याद किया, मुझे बहुत तेज :)


0

यहाँ आप किसी भी प्लगइन्स या फ़ंक्शन के बिना भूमिकाओं की सूची कैसे पा सकते हैं http://screencast.com/t/uaWsGLAR3Sh


6
हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक-केवल उत्तर अमान्य हो सकते हैं यदि लिंक किए गए पृष्ठ बदल जाते हैं।
गेब्रियल

0

जिनके लिए बहुभाषी साइट है, फ़ंक्शन

function wp_roles_array() {
    $editable_roles = get_editable_roles();
    foreach ($editable_roles as $role => $details) {
        $sub['role'] = esc_attr($role);
        $sub['name'] = translate_user_role($details['name']);
        $roles[] = $sub;
    }
    return $roles;
}

इस तरह स्थानीयकृत सरणी देता है (भूमिका नाम स्लोवाक भाषा में हैं):

Array
(
    [0] => Array
        (
            [role] => administrator
            [name] => Administrátor
        )

    [1] => Array
        (
            [role] => editor
            [name] => Editor
        )

    [2] => Array
        (
            [role] => author
            [name] => Autor
        )

    [3] => Array
        (
            [role] => contributor
            [name] => Prispievateľ
        )
)

0

यह सभी मौजूदा उपयोगकर्ता भूमिकाओं की एक सरणी और वर्डप्रेस में प्रत्येक भूमिका के लिए क्षमताओं को प्राप्त करने का तरीका है। यदि आप इसे स्क्रीन पर प्रिंट नहीं करना चाहते हैं, तो अंतिम पंक्ति को छोड़ दें। पंक्ति 2 पर $ चर चर उपयोगकर्ताओं और क्षमताओं के सरणी को धारण करेगा ताकि आप इसका उपयोग कर सकें लेकिन आपको इसकी आवश्यकता है। नीचे दिए गए सरणी के उदाहरण के लिए नीचे देखें।

global $wp_roles;
$roles = $wp_roles->roles; 

// print it to the screen
echo '<pre>' . print_r( $roles, true ) . '</pre>';
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.