Bagaimana cara menambahkan Kemampuan ke Peran Pengguna?

14

Saya mengelola jaringan Wordpress dan ingin menambahkan kapabilitas pengguna unfiltered_html ke peran pengguna Admin yang sudah ditentukan sebelumnya. Dalam instalasi standar Wordpress, akun Admin sudah memiliki kemampuan ini tetapi dalam instalasi MU hanya Admin Super yang diberikan kemampuan ini. Peran dan Kemampuan Wordpress .

Bagaimana saya bisa menambah peran Admin dari dalam tema atau plugin?

Jonnybojangles
sumber
1
wordpress.org/extend/plugins/unfiltered-mu sepertinya bisa membantu. Tetapi ini berfungsi untuk admin dan editor. Jika itu tidak diinginkan, mungkin kodenya bisa diubah sedikit?
Pdt. Voodoo
@Putaran. Voodoo Terima kasih atas sarannya. Ini membantu menjelaskan beberapa hal tentang menambahkan kemampuan unfiltered_html tidak cukup untuk memungkinkan peran selain Admin atau Super admin kemampuan untuk mengirim embed, dll. Kuncinya adalah menyaring / mengaitkan Wordpress 'KSES: kses_remove_filters ()
Jonnybojangles
Blog detail: goo.gl/xNuafH
Suresh Kamrushi

Jawaban:

14

Anda dapat menggunakan kelas WP_Role ,

// get the the role object
$role_object = get_role( $role_name );

// add $cap capability to this role object
$role_object->add_cap( $capability_name );

// remove $cap capability from this role object
$role_object->remove_cap( $capability_name );

Jadi untuk menjawab pertanyaan awal Anda tentang cara mengaktifkan Admin untuk memasukkan tag SCRIPT dan IFRAME ke dalam konten posting, Anda sedang mencari kemampuan 'unfiltered_html', yang dalam Multisite hanya diberikan kepada Admin Super.

// get the the role object
$admin_role = get_role( 'administrator' );
// grant the unfiltered_html capability
$admin_role->add_cap( 'unfiltered_html', true );

atau Anda dapat menjalankan ini sekali dalam fungsi Anda:

/* Roles & Capabilities */
add_role('professional', 'Professional User', array(
    'read' => true, // True allows that capability, False specifically removes it.
    'edit_posts' => true,
    'delete_posts' => true,
    //'edit_published_posts' => true,
    //'publish_posts' => true,
    //'edit_files' => true,
    'upload_files' => true //last in array needs no comma!
));
Philip
sumber
Terima kasih Philip. Sehubungan dengan kelas WP_Role kapan harus mengeksekusi kode? Saya menduga ini mempengaruhi objek peran global? Saya senang bahwa Anda membuka blok kode kedua yang menyebutkan bahwa saya dapat menjalankan ini sekali di file fungsi saya. Saya telah menemukan solusi serupa di beberapa forum dukungan Wordpress tetapi saya merasa aneh untuk menjalankan kode sekali dalam tema atau plugin masuk. Terutama tanpa centang apakah perubahan sudah ada. Mungkin peran menulis sebenarnya dapat diabaikan. Untuk memeriksa kapabilitas vs, cukup tulis kapabilitas ke peran seperti yang ditunjukkan contoh pertama Anda.
Jonnybojangles
Saya juga tertarik pada bagaimana Anda akan menjalankan kelas WP_Role jika Anda punya waktu luang untuk memberi tahu kami. Terima kasih
Osu
1
@Jonnybojagles & @Osu, lihat ini: Panduan Utama untuk Peran & Kemampuan garyc40.com/2010/04/ultimate-guide-to-roles-and-capability
Philip
Saya sudah membaca artikel itu dalam pengejaran saya, tetapi saya benar-benar mengambil kesempatan untuk membahasnya lagi, terima kasih! Akhirnya, setelah membedah plugin uniltered-mu (disebutkan di atas oleh Rev. Voodoo) akhirnya saya menemukan bahwa mengubah peran dengan menambahkan kemampuan tidak cukup. Saya perlu menyaring filter KSES Wordpress.
Jonnybojangles
Saya lebih suka menambahkan koma ke elemen terakhir dalam array. Meskipun mungkin tampak tidak relevan karena tidak perlu membuat kode berfungsi atau menghasilkan kesalahan, itu berguna ketika menggunakan kontrol versi ketika memvisualisasikan modifikasi; Anda tidak akan melihat baris lama item array dihapus, ditambahkan kembali, dan disorot sebagai baru dengan hanya koma sebagai tambahan atau perubahan yang dibuat untuk baris itu. Meskipun sedikit, ini membantu menghemat banyak waktu ketika menganalisis modifikasi.
nyedidikeke
2

Untuk memungkinkan peran lain selain Super Admin atau Admin (tergantung jika instalasi Wordpress adalah jaringan / MU atau tidak) untuk menambahkan html tanpa filter ke posting atau komentar Filter KSES Wordpress harus dihapus.

Periksa apakah pengguna memiliki kemampuan tertentu.

if ( current_user_can( 'unfiltered_html' ) ) {  }

Jika demikian daripada menghapus KSES

kses_remove_filters();

Fungsionalitas ini sudah terbungkus dalam uniltered-mu, memungkinkan admin dan editor untuk menambahkan html tanpa filter.

Jonnybojangles
sumber
Fungsionalitas ini juga dibungkus register plugin dan deregister sehingga logikanya tidak perlu dibentuk sebelumnya pada setiap instance WP.
Jonnybojangles