จะเปลี่ยนบทบาทของผู้ใช้ได้อย่างไร?


34

ฉันมีบทบาทที่กำหนดเองในการตั้งค่าของฉันและฉันต้องการที่จะสามารถเปลี่ยนบทบาทของผู้ใช้ผ่านฟังก์ชั่นโดยอัตโนมัติ ถ้าผู้ใช้ A มีบทบาทสมาชิกฉันจะเปลี่ยนเป็น 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 kanth

1
นี่คือที่สมบูรณ์แบบสำหรับแบบฟอร์มลงทะเบียนที่กำหนดเอง ลงทะเบียนผู้ใช้ครั้งแรกโดยไม่มีบทบาทและหลังจากนั้นจะเพิ่มบทบาทเมื่อพวกเขายืนยันอีเมล
Ivijan Stefan Stipić

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

ใช่ในกรณีของฉันการวางนั้นมาจากตัวอย่างหลายไซต์ ฉันไม่ได้กำหนดที่นี่อย่างชัดเจนดังนั้นมันจะผิดพลาด
Adam Munns

2

คุณสามารถเปลี่ยนบทบาทของผู้ใช้โดยแก้ไขโปรไฟล์ผู้ใช้ ไม่จำเป็นต้องเพิ่มรหัสใด ๆ อีกต่อไปเมื่อตัวเลือกนี้ถูกสร้างไว้ใน WordPress แล้ว

ป้อนคำอธิบายรูปภาพที่นี่

หรือ

คุณสามารถใช้รหัสเพื่อเปลี่ยนผู้ใช้ปัจจุบันทั้งหมดด้วยบทบาทสมาชิกเป็นตัวแก้ไข:

$current_user = wp_get_current_user();

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

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

1

มีฟังก์ชั่น WordPress สำหรับเรื่องนี้!

ฉันคิดว่ามันเป็นการดีที่สุดที่จะใช้ฟังก์ชั่น WordPress ถ้าและเมื่อพวกเขามีอยู่

คุณสามารถใช้ฟังก์ชัน wp_insert_user ()ซึ่งหนึ่งในข้อโต้แย้งที่คุณจะต้องระบุคือ $ userdata ['role'] ในอาร์กิวเมนต์นี้คุณสามารถระบุบทบาทที่คุณต้องการเปลี่ยนผู้ใช้เป็น


wp ไม่รู้จักฟังก์ชันนั้น ฉันได้รับข้อผิดพลาด "ฟังก์ชันที่ไม่ได้กำหนด"
Joann

จากรูปลักษณ์ของมัน wp_insert_user () ดูเหมือนจะทำสิ่งเดียวกัน เมื่อคุณระบุ ID ID นั้นจะได้รับการอัปเดต ไม่มี ID กำลังเพิ่มผู้ใช้ใหม่ ยังไม่ทราบความแตกต่างระหว่าง wp_update_user () และ wp_insert_user () คืออะไร
Coen Jacobs

1

คุณต้องรวม /wp-includes/registration.php หากคุณใช้รหัสเป็นสคริปต์แบบสแตนด์อโลน ขอแสดงความนับถือ Uwe


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_capabilitiesในmeta_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);

โชคดี.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.