Làm thế nào để thay đổi vai trò của người dùng?


34

Tôi có các vai trò tùy chỉnh trong thiết lập của mình và tôi muốn có thể tự động thay đổi vai trò của người dùng thông qua chức năng. Giả sử người dùng A có vai trò SUBSCRIBER, làm cách nào để thay đổi nó thành EDITOR? Khi thêm một vai trò, chúng tôi chỉ:

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

Làm thế nào về việc thay đổi một vai trò? Có cái gì đó như:

change_role($old_role, $new_role);

CẬP NHẬT: Tôi nghĩ rằng điều này sẽ làm:

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

Câu trả lời:


50

Xem lớp WP_User , bạn có thể sử dụng lớp này để thêm và xóa vai trò cho người dùng.

EDIT: Tôi thực sự nên cung cấp thêm thông tin với câu trả lời này ban đầu, vì vậy tôi sẽ thêm nhiều thông tin bên dưới.

Cụ thể hơn, vai trò của người dùng có thể được đặt bằng cách tạo một thể hiện của lớp WP_user và gọi các phương thức add_role()hoặc remove_role().

Thí dụ

Thay đổi vai trò người đăng ký thành biên tập viên

// 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' );

Hy vọng rằng điều đó hữu ích hơn phản hồi ban đầu của tôi, điều này không nhất thiết phải hữu ích.


remove_role()add_rule()lưu dữ liệu vào cơ sở dữ liệu?
b_dubb

18

Chỉ cần lưu ý rằng có một cách đơn giản hơn để thay đổi vai trò người dùng, điều này đặc biệt hữu ích khi bạn không biết vai trò hiện tại của người dùng: ->set_role()

Thí dụ:

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

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

Hãy nhớ rằng set_role sẽ xóa các vai trò trước đó của người dùng và gán vai trò mới.
shasi kanth

1
Điều này là hoàn hảo cho các hình thức đăng ký tùy chỉnh. Đầu tiên người dùng đăng ký không có vai trò và sau đó thêm vai trò khi họ xác nhận email.
Ivijan Stefan Stipić

3

Để ngoại suy câu trả lời của t31os, bạn có thể tát một cái gì đó như thế này vào tệp chức năng của mình nếu bạn muốn thực hiện việc này theo chương trình dựa trên một điều kiện

$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' );
    }
}

Tôi nghĩ rằng việc sử dụng của bạn $blogIDlà sai. get_users()sẽ sử dụng ID blog hiện tại theo mặc định.
fuxia

vâng, trong trường hợp của tôi, dán chỉ là từ một ví dụ đa điểm. Tôi đã không định nghĩa nó ở đây hoặc vì vậy rõ ràng nó sẽ gây ra lỗi.
Adam Munns

2

Bạn có thể thay đổi vai trò của bất kỳ người dùng nào bằng cách chỉnh sửa hồ sơ người dùng. Không cần thêm bất kỳ mã nào khi tùy chọn này đã được tích hợp vào WordPress.

nhập mô tả hình ảnh ở đây

Hoặc là

Bạn có thể sử dụng mã để thay đổi tất cả người dùng hiện tại với vai trò người đăng ký thành biên tập viên:

$current_user = wp_get_current_user();

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

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

1

Có một chức năng WordPress cho điều đó!

Tôi nghĩ tốt nhất là sử dụng các chức năng của WordPress, nếu và khi chúng có sẵn.

Bạn có thể sử dụng hàm wp_insert_user () , trong đó một trong những đối số mà bạn sẽ cần cung cấp là $ userdata ['vai trò']. Trong đối số này, bạn có thể chỉ định vai trò mà bạn muốn thay đổi người dùng thành.


wp không nhận ra chức năng đó. Tôi đã nhận được một lỗi "chức năng không xác định".
Joann

Nhìn bề ngoài của nó, wp_insert_user () dường như làm chính xác như vậy. Khi bạn cung cấp ID, ID đó sẽ được cập nhật. Không có ID đang thêm người dùng mới. Không thực sự biết sự khác biệt giữa wp_update_user () và wp_insert_user () là gì.
Coen Jacobs

1

bạn phải bao gồm /wp-includes/registration.php, nếu bạn sử dụng mã dưới dạng tập lệnh độc lập. Trân trọng


1

Bạn có thể sử dụng wp_update_user . Mã của bạn sẽ như thế này:

<?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

Tôi biết Bài đăng rất cũ của mình, nhưng tôi đã thấy rằng các vai trò cho người dùng được lưu trữ trong wp_usermetabảng có khóa wp_capabilitiestrongmeta_key cột.

Nếu bạn muốn thay đổi vai trò người dùng, bạn có thể thực hiện bằng chức năng đơn giản này.

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);
}

Có hai cách để sử dụng chức năng này.

Nếu bạn muốn thay đổi vai trò cho một vai trò duy nhất.

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

Hoặc nếu bạn muốn thêm nhiều vai trò cho người dùng, hãy sử dụng các vai trò như mảng trong tham số thứ hai.

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

Chúc may mắn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.