Mendapatkan Daftar Peran yang Saat Ini Tersedia di Situs WordPress?


38

Saat menulis plugin WordPress, seringkali ada kebutuhan untuk mengatur opsi yang perannya di situs memiliki akses ke fungsionalitas atau konten tertentu. Untuk melakukan ini, dev plugin perlu mengambil daftar peran yang ada di situs untuk digunakan dalam opsi. Karena peran khusus dapat dibuat, kami tidak dapat menganggap peran default adalah satu-satunya yang tersedia.

Apa cara terbaik untuk mengambil daftar?


6
Catatan: Pertanyaan ini awalnya ditanyakan oleh Ryan Bilesky di milis wp-hacker dan dijawab oleh saya. Saya menambahkannya di sini karena ini adalah kasus yang jelas dari pertanyaan praktik terbaik yang mungkin orang tanyakan ke google :)
jerclarke

1
Hey @Jeremy Clarke - Senang sekali bisa berpartisipasi di sini dan ini adalah jenis hal yang kami cari di sini; jawaban yang terkait dengan pertanyaan umum yang juga dapat mengungkapkan praktik terbaik. Pujian!
MikeSchinkel

Jawaban:


47

Peran disimpan dalam variabel global $wp_roles.

Fungsi yang ideal adalahget_editable_roles() dari/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;
}

Bagian "yang dapat diedit" adalah karena menawarkan plugin lain kesempatan untuk menyaring daftar jika seseorang selain admin memiliki 'edit_users'hak istimewa (dan dengan demikian 'admin' perlu dihapus dari daftar, jika tidak maka pengguna dapat membuat sendiri admin). Plugin manajemen peran yang digunakan untuk membuat peran khusus adalah yang akan menggunakan filter itu. Kalau tidak, fungsi ini pada dasarnya get_roles() (yang tidak ada) .

Agaknya plugin Anda hanya akan menawarkan halaman pengaturan yang dipermasalahkan kepada seseorang yang memiliki kemampuan tingkat admin seperti 'manage_options'dan pada dasarnya adalah admin dengan akses ke semua peran, sehingga filter tidak akan memengaruhi Anda.

Ada jugawp_dropdown_roles() yang memberi Anda peran sebagai <option>bidang untuk<select> daftar (meskipun kotak centang cenderung bekerja lebih baik di banyak skenario di mana Anda memilih siapa yang memiliki akses ke sesuatu) .


3
Catatan: Saya membuat fungsi ini sebagai bagian dari tambalan untuk membuat WP lebih aman, jadi saya bias mendukungnya;)
jerclarke

14

Coba ini:

function get_role_names() {

global $wp_roles;

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

return $wp_roles->get_names();
}

PS heh, merindukan penjelasan itu dan membalas, terlalu cepat aku :)


0

Inilah cara Anda dapat menemukan daftar peran tanpa plugin atau fungsi apa pun. Http://screencast.com/t/uaWsGLAR3Sh


6
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah.
Gabriel

0

Bagi mereka yang memiliki situs multibahasa, fungsinya

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

mengembalikan array yang dilokalkan seperti ini (nama peran dalam bahasa Slowakia):

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

Ini adalah cara mendapatkan array dari semua peran pengguna yang ada, dan kemampuan untuk setiap peran, di WordPress. Jika Anda tidak ingin mencetaknya di layar, abaikan baris terakhir. Variabel $ peran pada baris 2 akan menampung array pengguna dan kemampuan sehingga Anda dapat menggunakannya sesuka Anda. Lihat di bawah untuk contoh array yang dikembalikan.

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

// print it to the screen
echo '<pre>' . print_r( $roles, true ) . '</pre>';
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.