Cum se adaugă o Permisiune (Capability) la un Rol de Utilizator?
Administrez o rețea WordPress și aș dori să adaug permisiunea unfiltered_html la rolul predefinit de Administrator. Într-o instalare standard WordPress, contul de Administrator ar avea deja această permisiune, dar într-o instalare MU doar Super Administratorii beneficiază de această permisiune. Roluri și Permisiuni WordPress.
Cum pot augmenta rolul de Administrator din interiorul unei teme sau plugin?

Poți folosi clasa WP_Role,
// obține obiectul rolului
$role_object = get_role( $role_name );
// adaugă capacitatea $cap acestui obiect rol
$role_object->add_cap( $capability_name );
// elimină capacitatea $cap din acest obiect rol
$role_object->remove_cap( $capability_name );
Deci, pentru a răspunde la întrebarea ta inițială despre cum să permiți Administratorilor să introducă tag-uri SCRIPT și IFRAME în conținutul postărilor, cauți capacitatea 'unfiltered_html', care în Multisite este acordată doar Super Administratorilor.
// obține obiectul rolului
$admin_role = get_role( 'administrator' );
// acordă capacitatea unfiltered_html
$admin_role->add_cap( 'unfiltered_html', true );
sau poți rula acest cod o singură dată în functions.php:
/* Roluri & Capabilități */
add_role('professional', 'Utilizator Profesional', array(
'read' => true, // True permite acea capacitate, False o elimină în mod specific.
'edit_posts' => true,
'delete_posts' => true,
//'edit_published_posts' => true,
//'publish_posts' => true,
//'edit_files' => true,
'upload_files' => true //ultimul din array nu are nevoie de virgulă!
));

Mulțumesc Philip. În legătură cu clasa WP_Role, când ar trebui să execut codul? Presupun că aceasta afectează obiectul global de rol?
Mă bucur că ai adus în discuție al doilea bloc de cod menționând că aș putea rula acest cod o singură dată în fișierul meu de funcții. Am găsit soluții similare pe unele forumuri de suport WordPress, dar mi se pare ciudat să rulez cod o singură dată într-o temă sau într-un plugin. Mai ales fără o verificare dacă modificarea există deja. Poate că scrierea rolului este de fapt neglijabilă. Pentru a verifica capacitatea versus a scrie pur și simplu capacitatea în rol, așa cum arată primul tău exemplu.

Sunt și eu interesat de modul în care ai executa clasa WP_Role dacă ai un moment liber să ne spui. Mulțumesc

@Jonnybojagles & @Osu, verificați asta: Ghidul Ultimate pentru Roluri și Capacități http://www.garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities/

Am citit deja acel articol în căutarea mea, dar am profitat de ocazie să-l parcurg din nou, mulțumesc! În cele din urmă, după ce am disecat plugin-ul unfiltered-mu (menționat mai sus de Rev. Voodoo) am aflat că schimbarea rolurilor prin adăugarea de capabilități nu este suficientă. A fost necesar să dezactivez filtrele KSES din WordPress.

Prefer să adaug o virgulă la ultimul element din array-uri. Chiar dacă poate părea irelevant, deoarece nu este necesar pentru funcționarea codului și nici nu produce erori, este util când folosești un sistem de control al versiunilor pentru vizualizarea modificărilor; nu ai vedea o linie veche dintr-un array ștearsă, readăugată și evidențiată ca nouă doar cu o virgulă ca adăugare sau modificare pentru acea linie. Deși mică, ajută la economisirea mult timp când analizezi modificările.

Pentru a permite unui alt rol, în afară de Super Admin sau Admin (în funcție de dacă instalarea WordPress este o instanță de rețea/MU sau nu), să adauge HTML nefiltrat într-un articol sau comentariu, filtrul KSES al WordPress trebuie eliminat.
Verifică dacă un utilizator are o anumită capabilitate.
if ( current_user_can( 'unfiltered_html' ) ) { … }
Dacă da, atunci elimină KSES
kses_remove_filters();
Această funcționalitate este deja inclusă în unfiltered-mu, permițând administratorilor și editorilor să adauge HTML nefiltrat.
