Come aggiungere una Capability a un Ruolo Utente?

29 mar 2011, 20:31:17
Visualizzazioni: 47.6K
Voti: 19

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?

4
Commenti

http://wordpress.org/extend/plugins/unfiltered-mu/ sembra possa aiutare. Ma funziona solo per amministratori e editori. Se non è quello che vuoi, forse il codice può essere modificato un po'?

Rev. Voodoo Rev. Voodoo
29 mar 2011 22:30:51

@Rev. Voodoo Grazie per il suggerimento. Questo ha aiutato a fare luce sull'argomento poiché aggiungere la capacità unfiltered_html non è sufficiente per consentire a un ruolo diverso da Amministratore o Super amministratore di pubblicare embed, ecc. La chiave era rimuovere i filtri/hook di KSES di Wordpress: kses_remove_filters()

Jonnybojangles Jonnybojangles
6 apr 2011 02:44:09

Un blog dettagliato: http://goo.gl/xNuafH

Suresh Kamrushi Suresh Kamrushi
14 gen 2016 11:19:33
Tutte le risposte alla domanda 2
5
21

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!
));
30 mar 2011 08:39:58
Commenti

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.

Jonnybojangles Jonnybojangles
30 mar 2011 19:01:07

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

Osu Osu
30 mar 2011 21:49:00

@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/

Philip Philip
31 mar 2011 08:39:36

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.

Jonnybojangles Jonnybojangles
6 apr 2011 02:52:18

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.

nyedidikeke nyedidikeke
31 mag 2017 13:40:00
1

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.

6 apr 2011 21:17:14
Commenti

La funzionalità è inoltre racchiusa in un plugin register e deregister in modo che la logica non debba essere eseguita su ogni istanza di WP.

Jonnybojangles Jonnybojangles
12 apr 2011 21:30:27