Bagaimana cara mengubah peran pengguna?

34

Saya memiliki peran khusus dalam pengaturan saya dan saya ingin dapat secara otomatis mengubah peran pengguna melalui fungsi. Katakanlah pengguna A memiliki peran PELANGGAN, bagaimana cara mengubahnya ke EDITOR? Saat menambahkan peran, kami hanya:

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

Bagaimana dengan mengubah peran? Apakah ada sesuatu seperti:

change_role($old_role, $new_role);

UPDATE: Saya pikir ini akan dilakukan:

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

Jawaban:

50

Lihat kelas WP_User , Anda dapat menggunakan ini untuk menambah dan menghapus peran untuk pengguna.

EDIT: Saya seharusnya memberikan lebih banyak informasi dengan jawaban ini pada awalnya, jadi saya menambahkan lebih banyak informasi di bawah ini.

Lebih khusus lagi, peran pengguna dapat diatur dengan membuat instance kelas WP_user, dan memanggil metode add_role()atau remove_role().

Contoh

Ubah peran pelanggan menjadi editor

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

Semoga itu lebih bermanfaat daripada respons awal saya, yang belum tentu bermanfaat.

t31os
sumber
remove_role()dan add_rule()menyimpan data ke database?
b_dubb
18

Perhatikan bahwa ada cara yang lebih sederhana untuk mengubah peran pengguna yang sangat membantu ketika Anda tidak tahu peran pengguna saat ini: ->set_role()

Contoh:

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

// Replace the current role with 'editor' role
$u->set_role( 'editor' );
Philipp
sumber
Ingat bahwa set_role akan menghapus peran pengguna sebelumnya dan menetapkan peran baru.
shasi kanth
1
Ini sempurna untuk formulir pendaftaran khusus. Pertama, daftarkan pengguna tanpa peran dan setelah itu tambahkan peran saat mereka mengkonfirmasi email.
Ivijan Stefan Stipic
3

Untuk mengekstrapolasi jawaban t31os, Anda dapat menampar sesuatu seperti ini di file fungsi Anda jika Anda ingin melakukan ini secara terprogram berdasarkan kondisi

$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' );
    }
}
Adam Munns
sumber
Saya pikir penggunaan Anda $blogIDsalah. get_users()akan menggunakan ID blog saat ini per standarnya.
fuxia
ya, dalam kasus saya tempel itu hanya dari contoh multisite. Saya tidak mendefinisikannya di sini juga jadi jelas itu akan menimbulkan kesalahan.
Adam Munns
2

Anda dapat mengubah peran pengguna mana pun dengan mengedit profil pengguna. Tidak perlu menambahkan kode lagi ketika opsi ini sudah dibangun ke WordPress.

masukkan deskripsi gambar di sini

Atau

Anda bisa menggunakan kode untuk mengubah semua pengguna saat ini dengan peran pelanggan menjadi editor:

$current_user = wp_get_current_user();

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

// Add role
$current_user->add_role( 'editor' );
Brad Dalton
sumber
1

Ada fungsi WordPress untuk itu!

Saya pikir yang terbaik adalah menggunakan fungsi WordPress, jika dan kapan tersedia.

Anda dapat menggunakan fungsi wp_insert_user () , di mana salah satu argumen yang perlu Anda berikan adalah $ userdata ['role']. Dalam argumen ini Anda bisa menentukan peran yang ingin Anda ubah pengguna.

Coen Jacobs
sumber
wp tidak mengenali fungsi itu. Saya mendapat kesalahan "fungsi tidak terdefinisi".
Joann
Dari tampilannya, wp_insert_user () tampaknya melakukan hal yang persis sama. Saat Anda memberikan ID, ID itu akan diperbarui. Tidak ada ID yang menambahkan pengguna baru. Belum benar-benar tahu apa perbedaan antara wp_update_user () dan wp_insert_user ().
Coen Jacobs
1

Anda harus menyertakan /wp-includes/registration.php, jika Anda menggunakan kode sebagai skrip yang berdiri sendiri. Salam Uwe


sumber
1

Anda dapat menggunakan wp_update_user . Kode Anda harus seperti ini:

<?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!
    }
?>
Nour Edin Al-Habal
sumber
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' );
    }
?>
Wasim Khan
sumber
0

Saya tahu ini Posting yang sangat lama, tetapi saya telah menemukan bahwa peran untuk pengguna disimpan dalam wp_usermetatabel dengan kunci wp_capabilitiesdi meta_keykolom.

Jika Anda ingin mengubah peran pengguna, Anda dapat melakukannya dengan fungsi sederhana ini.

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

Ada dua cara untuk menggunakan fungsi ini.

Jika Anda ingin mengubah peran untuk peran tunggal.

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

Atau jika Anda ingin menambahkan multi peran ke pengguna, gunakan peran sebagai larik di parameter kedua.

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

Semoga berhasil.

Mohammed Alhanafi
sumber