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


34

मेरे सेटअप में कस्टम भूमिकाएँ हैं और मैं एक फ़ंक्शन के माध्यम से उपयोगकर्ता की भूमिका को स्वचालित रूप से बदलने में सक्षम होना चाहता हूं। कहते हैं कि उपयोगकर्ता A की SUBSCRIBER भूमिका है, मैं इसे EDITOR में कैसे बदलूं? एक भूमिका जोड़ते समय हम सिर्फ:

add_role( $role_name , $role_display_name , array( 'read' =>  true,
                                                   'edit_posts' => false,
                                                   'delete_posts' => false, ));

भूमिका बदलने के बारे में कैसे? क्या कुछ ऐसा है:

change_role($old_role, $new_role);

अद्यतन: मुझे लगता है कि यह एक करेगा:

$wp_user_object = new WP_User($current_user->ID);
$wp_user_object->set_role('editor');

जवाबों:


50

देखें WP_User वर्ग , आप इसका उपयोग उपयोगकर्ता के लिए भूमिकाएँ जोड़ने और हटाने के लिए कर सकते हैं।

संपादित करें: मुझे वास्तव में शुरू में इस उत्तर के साथ अधिक जानकारी प्रदान करनी चाहिए थी, इसलिए मैं नीचे अधिक जानकारी जोड़ रहा हूं।

विशेष रूप से, WP_user वर्ग का एक उदाहरण बनाकर add_role()या remove_role()विधियों को कॉल करके उपयोगकर्ता की भूमिका निर्धारित की जा सकती है ।

उदाहरण

ग्राहक की भूमिका को संपादक में बदलें

// NOTE: Of course change 3 to the appropriate user ID
$u = new WP_User( 3 );

// Remove role
$u->remove_role( 'subscriber' );

// Add role
$u->add_role( 'editor' );

उम्मीद है कि मेरी प्रारंभिक प्रतिक्रिया की तुलना में यह अधिक उपयोगी है, जो आवश्यक रूप से सहायक नहीं था।


remove_role()और add_rule()डेटाबेस में डेटा को बचाने के लिए?
b_dubb

18

बस ध्यान दें कि उपयोगकर्ता भूमिका को बदलने का एक सरल तरीका है जो विशेष रूप से तब उपयोगी होता है जब आप उपयोगकर्ता की वर्तमान भूमिका को नहीं जानते: ->set_role()

उदाहरण:

// Fetch the WP_User object of our user.
$u = new WP_User( 3 );

// Replace the current role with 'editor' role
$u->set_role( 'editor' );

याद रखें कि set_role उपयोगकर्ता की पिछली भूमिकाओं को हटा देगा और नई भूमिका असाइन करेगा।
shasi kant

1
यह कस्टम पंजीकरण प्रपत्रों के लिए एकदम सही है। पहले उपयोगकर्ताओं को बिना किसी भूमिका के पंजीकृत करें और उसके बाद भूमिका जोड़ें जब वे ईमेल की पुष्टि करें।
इविज़न स्टीफन स्टिपिक

3

T31os के उत्तर पर एक्सट्रपलेशन करने के लिए आप अपने कार्य फ़ाइल में कुछ इस तरह से थप्पड़ मार सकते हैं यदि आप किसी शर्त के आधार पर यह प्रोग्राम करना चाहते हैं

$blogusers = get_users($blogID.'&role=student');

foreach ($blogusers as $user) {

    $thisYear = date('Y-7');
    $gradYear = date(get_the_author_meta( 'graduation_year', $user->ID ).'-7');

    if($gradYear < $thisYear) {
        $u = new WP_User( $user->ID );
        // Remove role
        $u->remove_role( 'student' );

        // Add role
        $u->add_role( 'adult' );
    }
}

मुझे लगता है कि आपका उपयोग $blogIDगलत है। get_users()वैसे भी प्रति डिफ़ॉल्ट वर्तमान ब्लॉग आईडी का उपयोग करेगा।
FUXIA

हां, मेरे मामले में पेस्ट सिर्फ एक मल्टीसाइट उदाहरण से था। मैंने इसे यहाँ परिभाषित नहीं किया या तो स्पष्ट रूप से यह एक त्रुटि है।
एडम मुन्स

2

आप उपयोगकर्ता प्रोफ़ाइल को संपादित करके किसी भी उपयोगकर्ता की भूमिका बदल सकते हैं। जब यह विकल्प पहले से ही वर्डप्रेस में बनाया गया हो तो कोई और कोड जोड़ने की आवश्यकता नहीं है।

यहाँ छवि विवरण दर्ज करें

या

आप संपादक की ग्राहक भूमिका के साथ सभी वर्तमान उपयोगकर्ताओं को बदलने के लिए कोड का उपयोग कर सकते हैं:

$current_user = wp_get_current_user();

// Remove role
$current_user->remove_role( 'subscriber' );

// Add role
$current_user->add_role( 'editor' );

1

उसके लिए वर्डप्रेस फंक्शन है!

मुझे लगता है कि वर्डप्रेस फ़ंक्शंस का उपयोग करना सबसे अच्छा है, अगर और जब वे उपलब्ध हों।

आप wp_insert_user () फ़ंक्शन का उपयोग कर सकते हैं , जहां एक तर्क जो आपको प्रदान करना होगा, वह है $ userdata ['भूमिका']। इस तर्क में आप उस भूमिका को निर्दिष्ट कर सकते हैं जिसे आप उपयोगकर्ता में बदलना चाहते हैं।


wp उस फ़ंक्शन को नहीं पहचानता है। मुझे एक "अपरिभाषित फ़ंक्शन" त्रुटि मिली।
जोन डे

इसके द्वारा, wp_insert_user () ठीक वैसा ही लगता है। जब आप एक आईडी प्रदान करते हैं, तो वह आईडी अपडेट हो जाती है। कोई भी ID नया उपयोगकर्ता नहीं जोड़ रहा है। वास्तव में नहीं जानते कि wp_update_user () और wp_insert_user () के बीच क्या अंतर है, अभी तक।
कोक जैकब्स

1

यदि आप कोड को एक अकेले स्क्रिप्ट के रूप में उपयोग करते हैं, तो आपको /wp-includes/registration.php को शामिल करना होगा। सादर उवे


1

आप wp_update_user का उपयोग कर सकते हैं । आपका कोड इस तरह से होना चाहिए:

<?php
    $user_id = 3;
    $new_role = 'editor';

    $result = wp_update_user(array('ID'=>$user_id, 'role'=>$new_role));

    if ( is_wp_error( $result ) ) {
        // There was an error, probably that user doesn't exist.
    } else {
        // Success!
    }
?>

0
<?php
$wuser_ID = get_current_user_id();
if ($wuser_ID)
    {
      // NOTE: Of course change 3 to the appropriate user ID
      $u = new WP_User( $wuser_ID );

      // Remove role
      $u->remove_role( 'subscriber' );

      // Add role
      $u->add_role( 'contributor' );
    }
?>

0

मुझे इसकी बहुत पुरानी पोस्ट पता है, लेकिन मैंने पाया है कि उपयोगकर्ताओं के लिए भूमिकाएँ स्तंभ में wp_usermetaकुंजी के साथ तालिका में संग्रहीत की जाती हैं ।wp_capabilitiesmeta_key

यदि आप उपयोगकर्ता की भूमिका बदलना चाहते हैं, तो आप इसे इस साधारण फ़ंक्शन द्वारा कर सकते हैं।

function change_role($id, $new_role){
    GLOBAL $table_prefix;
    if(is_array($new_role)){
        $new_role_array = $new_role;
    }else{
        $new_role_array = array( $new_role => true );
    }
    return update_user_meta($id, $table_prefix.'capabilities', $new_role_array);
}

इस फ़ंक्शन का उपयोग करने का दो तरीका है।

यदि आप एकल भूमिका के लिए भूमिका बदलना चाहते हैं।

change_role(2, 'editor'); // editor is the new role

या यदि आप उपयोगकर्ता के लिए मल्टी रोल्स जोड़ना चाहते हैं, तो दूसरे पैरामीटर में ऐरे के रूप में भूमिकाओं का उपयोग करें।

$roles_array = array('editor' => true, 'administrator' => true); // roles array
change_role(2, $roles_array);

सौभाग्य।

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