Comment ajouter une capacité à un rôle d'utilisateur?

14

Je gère un réseau Wordpress et je voudrais ajouter la capacité utilisateur unfiltered_html au rôle d'utilisateur déjà prédéfini d'Admin. Dans une installation standard de Wordpress, le compte administrateur aurait déjà cette capacité, mais dans une installation MU, seuls les super administrateurs ont cette capacité. Rôles et capacités de Wordpress .

Comment puis-je augmenter le rôle Admin à partir d'un thème ou d'un plugin?

Jonnybojangles
la source
1
wordpress.org/extend/plugins/unfiltered-mu semble que cela peut aider. Mais cela fonctionne pour les administrateurs et les éditeurs. Si ce n'est pas souhaité, peut-être que le code peut être modifié un peu?
Rév.Voodoo
@Tour. Voodoo Merci pour la suggestion. Cela a permis de faire la lumière sur le sujet que l' ajout de la capacité de unfiltered_html ne suffit pas pour permettre à un autre rôle que l' administrateur ou Super administrateur la capacité de Intègre poste, etc. La clé était un filtrage / accrochage de KSES de Wordpress: kses_remove_filters ()
Jonnybojangles
Un blog détaillé: goo.gl/xNuafH
Suresh Kamrushi

Réponses:

14

Vous pouvez utiliser 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 );

Donc, pour répondre à votre question initiale sur la façon d'activer les administrateurs pour entrer les balises SCRIPT et IFRAME dans le contenu des publications, vous recherchez la capacité `` unfiltered_html '', qui dans Multisite n'est accordée qu'aux super administrateurs.

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

ou vous pouvez l'exécuter une fois dans vos fonctions:

/* 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!
));
Philippe
la source
Merci Philippe. En ce qui concerne la classe WP_Role quand doit exécuter le code? Je suppose que cela affecte l'objet de rôle global? Je suis heureux que vous ayez apporté le deuxième bloc de code en mentionnant que je pourrais l'exécuter une fois dans mon fichier de fonctions. J'ai trouvé des solutions similaires sur certains des forums de support de Wordpress mais je trouve étrange d'avoir exécuté une fois le code dans un thème ou un plugin. Surtout sans vérifier si le changement existe déjà. Peut-être que l'écriture de rôle est en fait négligeable. Pour vérifier la capacité vs simplement écrire la capacité dans le rôle comme le montre votre premier exemple.
Jonnybojangles
Je suis également intéressé par la façon dont vous exécuteriez la classe WP_Role si vous avez un moment libre pour nous le dire. Merci
Osu
1
@Jonnybojagles & @Osu, consultez ceci: Ultimate Guide of Roles & Capabilities garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities
Philip
J'ai déjà lu cet article à ma poursuite, mais j'ai profité de l'occasion pour le parcourir à nouveau, merci! Finalement, après avoir disséqué le plugin unfiltered-mu (mentionné ci-dessus par le révérend Voodoo), j'ai finalement découvert que changer les rôles en ajoutant des capacités ne suffisait pas. J'avais besoin de filtrer les filtres KSES de Wordpress.
Jonnybojangles
Je préfère ajouter une virgule au dernier élément des tableaux. Même si cela peut sembler non pertinent car il n'est pas nécessaire de faire fonctionner le code ni d'entraîner des erreurs, il est pratique lors de l'utilisation d'un contrôle de version lors de la visualisation des modifications; vous ne verriez pas une ancienne ligne d'élément de tableau supprimée, rajoutée et mise en surbrillance comme nouvelle avec juste une virgule comme ajout ou modification apportée à cette ligne. Bien que petit, il permet de gagner beaucoup de temps lors de l'analyse des modifications.
nyedidikeke
2

Afin de permettre à un autre rôle autre que Super Admin ou Admin (selon que l'installation de Wordpress est une instance réseau / MU ou non) d'ajouter du HTML non filtré à une publication ou un commentaire, le filtre KSES de Wordpress doit être supprimé.

Vérifiez si un utilisateur a une capacité particulière.

if ( current_user_can( 'unfiltered_html' ) ) {  }

Si oui, supprimez KSES

kses_remove_filters();

Cette fonctionnalité est déjà incluse dans un filtre non filtré, permettant aux administrateurs et aux éditeurs d'ajouter du code HTML non filtré.

Jonnybojangles
la source
La fonctionnalité est également enveloppée dans un registre de plug-in et se désenregistre de sorte que la logique n'a pas besoin d'être préformée sur chaque instance WP.
Jonnybojangles du