Come aggiungere una Capability a un Ruolo Utente?
Sto gestendo una rete WordPress e vorrei aggiungere la capability unfiltered_html al ruolo utente Admin già predefinito. In un'installazione standard di WordPress l'account Admin avrebbe già questa capability, ma in un'installazione MU solo i Super Admin hanno questo privilegio. Ruoli e Capability di WordPress.
Come posso estendere il ruolo Admin da un tema o un plugin?

Puoi utilizzare la classe WP_Role,
// ottieni l'oggetto del ruolo
$role_object = get_role( $role_name );
// aggiungi la capacità $cap a questo oggetto ruolo
$role_object->add_cap( $capability_name );
// rimuovi la capacità $cap da questo oggetto ruolo
$role_object->remove_cap( $capability_name );
Quindi, per rispondere alla tua domanda originale su come consentire agli Amministratori di inserire tag SCRIPT e IFRAME nei contenuti dei post, stai cercando la capacità 'unfiltered_html', che in Multisite viene concessa solo ai Super Amministratori.
// ottieni l'oggetto del ruolo
$admin_role = get_role( 'administrator' );
// concedi la capacità unfiltered_html
$admin_role->add_cap( 'unfiltered_html', true );
oppure puoi eseguire questo codice una volta nelle tue funzioni:
/* Ruoli & Capacità */
add_role('professional', 'Utente Professionale', array(
'read' => true, // True consente quella capacità, False la rimuove specificamente.
'edit_posts' => true,
'delete_posts' => true,
//'edit_published_posts' => true,
//'publish_posts' => true,
//'edit_files' => true,
'upload_files' => true //l'ultimo nell'array non richiede la virgola!
));

Grazie Philip. Per quanto riguarda la classe WP_Role, quando dovrei eseguire il codice? Immagino che questo influisca sull'oggetto ruolo globale?
Sono contento che tu abbia menzionato il secondo blocco di codice dicendo che potrei eseguirlo una volta nel mio file functions. Ho trovato soluzioni simili su alcuni forum di supporto di WordPress ma trovo strano avere codice da eseguire una sola volta in un tema o plugin. Specialmente senza un controllo per verificare se la modifica esiste già. Forse la scrittura del ruolo è in effetti trascurabile. Meglio verificare la capability anziché semplicemente scriverla nel ruolo come mostra il tuo primo esempio.

Anch'io sono interessato a capire come eseguiresti la classe WP_Role se hai un momento libero per spiegarcelo. Grazie

@Jonnybojagles & @Osu, date un'occhiata a questa guida: Guida Completa a Ruoli & Capabilities http://www.garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities/

Ho già letto quell'articolo nella mia ricerca, ma ho colto l'opportunità di rileggerlo tutto, grazie! Alla fine, dopo aver analizzato il plugin unfiltered-mu (menzionato sopra da Rev. Voodoo) ho scoperto che cambiare i ruoli aggiungendo capacità non è sufficiente. Avevo bisogno di disattivare i filtri KSES di Wordpress.

Preferisco aggiungere una virgola all'ultimo elemento negli array. Anche se può sembrare irrilevante dato che non è necessario per far funzionare il codice né causa errori, è utile quando si utilizza un sistema di controllo versione per visualizzare le modifiche; non vedresti una vecchia riga di un elemento dell'array cancellata, riaggiunta e evidenziata come nuova con solo una virgola come aggiunta o modifica fatta per quella riga. Sebbene piccolo, aiuta a risparmiare molto tempo quando si analizzano le modifiche.

Per consentire a un ruolo diverso da Super Admin o Admin (a seconda che l'installazione di Wordpress sia una rete/istanza MU o meno) di aggiungere HTML non filtrato a un post o commento, il filtro KSES di Wordpress deve essere rimosso.
Verifica se un utente ha una specifica capability.
if ( current_user_can( 'unfiltered_html' ) ) { … }
Se è così, allora rimuovi KSES
kses_remove_filters();
Questa funzionalità è già integrata in unfiltered-mu, permettendo agli amministratori e agli editor di aggiungere HTML non filtrato.
