Come aggiungere una capacità a un ruolo utente?


14

Sto gestendo una rete Wordpress e vorrei aggiungere la funzionalità utente unfiltered_html al ruolo utente già predefinito di Admin. In un'installazione standard di Wordpress l'account Admin avrebbe già questa funzionalità, ma in un'installazione MU solo questa funzionalità è offerta ai Super amministratori. Ruoli e funzionalità di Wordpress .

Come posso aumentare il ruolo di amministratore all'interno di un tema o plugin?


1
wordpress.org/extend/plugins/unfiltered-mu sembra che possa aiutare. Ma funziona per amministratori e redattori. Se ciò non è desiderato, è possibile modificare leggermente il codice?
Rev. Voodoo,


@Rev. Voodoo Grazie per il suggerimento. Ciò ha contribuito a far luce sull'argomento in quanto l'aggiunta della capacità di unfiltered_html non è sufficiente per consentire a un ruolo diverso da Admin o Super admin la possibilità di pubblicare incorporamenti, ecc. La chiave era non filtrare / agganciare KSES di Wordpress: kses_remove_filters ()
Jonnybojangles,

Un blog dettagliato: goo.gl/xNuafH
Suresh Kamrushi

Risposte:


14

Puoi usare la classe 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 );

Quindi, per rispondere alla tua domanda originale su come abilitare gli amministratori a inserire tag SCRIPT e IFRAME nel contenuto dei post, stai cercando la funzionalità 'unfiltered_html', che in Multisito è concessa solo ai Super amministratori.

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

oppure puoi eseguirlo una volta nelle tue funzioni:

/* 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!
));

Grazie Filippo. Per quanto riguarda la classe WP_Role, quando eseguire il codice? Immagino che questo influisca sull'oggetto ruolo globale? Sono contento che tu abbia richiamato il secondo blocco di codice menzionando che avrei potuto eseguirlo una volta nel mio file delle funzioni. Ho trovato soluzioni simili su alcuni dei forum di supporto di Wordpress, ma trovo strano aver eseguito una volta il codice in un tema o plug-in. Soprattutto senza un controllo se la modifica esiste già. Forse la scrittura del ruolo è in realtà trascurabile. Per verificare la funzionalità vs basta scrivere la capacità per il ruolo come mostra il primo esempio.
Jonnybojangles,

Sono anche interessato a come eseguiresti la classe WP_Role se hai un momento libero di dircelo. Grazie
Osu,

1
@Jonnybojagles & @Osu, dai un'occhiata a questa: Guida definitiva a ruoli e funzionalità garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities
Phil

Ho già letto l'articolo nel mio inseguimento, ma ne ho approfittato per ripassare tutto di nuovo, grazie! Alla fine, dopo aver analizzato il plug-in non filtrato-mu (menzionato sopra dal Rev. Voodoo) alla fine ho scoperto che cambiare i ruoli aggiungendo funzionalità non è sufficiente. Avevo bisogno di non filtrare i filtri KSES di Wordpress.
Jonnybojangles,

Preferisco aggiungere una virgola all'ultimo elemento nelle matrici. Anche se può sembrare irrilevante in quanto non è necessario che il codice funzioni o che comporti errori, risulta utile quando si utilizza un controllo versione durante la visualizzazione delle modifiche; non vedresti una vecchia riga di elemento dell'array eliminata, aggiunta di nuovo ed evidenziata come nuova con solo una virgola come aggiunta o modifica apportata per quella riga. Anche se piccolo, aiuta a risparmiare molto tempo durante l'analisi delle modifiche.
nyedidikeke,

2

Per consentire un altro ruolo diverso da Super Admin o Admin (a seconda che l'installazione di Wordpress sia un'istanza di rete / MU o meno) per aggiungere html non filtrato a un post o commentare, è necessario rimuovere il filtro KSES di Wordpress.

Controlla se un utente ha una capacità particolare.

if ( current_user_can( 'unfiltered_html' ) ) {  }

In tal caso, rimuovere KSES

kses_remove_filters();

Questa funzionalità è già racchiusa in un-filtered mu, che consente agli amministratori e ai redattori di aggiungere HTML non filtrato.


La funzionalità è inoltre racchiusa in un registro plug-in e annulla la registrazione in modo che non sia necessario preformare la logica su ogni istanza WP.
Jonnybojangles,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.