web-dev-qa-db-fra.com

Plugin pour restreindre les utilisateurs non-administrateurs aux balises existantes

Existe-t-il un plugin qui limiterait les utilisateurs non-administrateurs aux balises existantes? J'aurais pu utiliser des catégories pour cela, mais il sera difficile d'afficher une population importante (~ 1000) de balises.

6
ltfishie

Si vos balises ne sont pas déjà créées, vous pouvez utiliser le plug-in "Ajout en masse de balises" - http://wordpress.org/extend/plugins/bulk-add-tags/

Ensuite, pour empêcher tous les utilisateurs, à l'exception des administrateurs, d'ajouter de nouveaux tags via l'écran "Nouveau message", ajoutez ce code au fichier functions.php de votre thème:

//Hide Post Page Options from all except Administrator
if (!current_user_can('administrator')){
function hide_post_page_options() {
global $post;
$hide_post_options = "<style type=\"text/css\"> .jaxtag { display: none; }</style>";
print($hide_post_options);
}
add_action( 'admin_head', 'hide_post_page_options'  );
}

Cela masquera simplement la case permettant de saisir de nouvelles balises pour tous les utilisateurs sauf les administrateurs.

J'utilise effectivement cette méthode pour masquer de nombreuses zones de la page "Nouveau message". Il suffit de rechercher et d'ajouter la classe div ou l'id de l'élément avant { display: none; } et en les séparant par des virgules. Si vous n'êtes pas familier, vous pouvez utiliser le plug-in Firebug avec Firefox ou simplement cliquer avec le bouton droit de la souris et sélectionner "Inspecter l'élément" dans Chrome.

Je préfère cette méthode à de nombreux plugins car elle ne supprime pas complètement les fonctionnalités de Wordpress, ces fonctionnalités sont simplement masquées aux utilisateurs qui n'en ont pas besoin.

2
Travis Pflanz

Aucune de ces solutions ne faisait exactement ce dont j'avais besoin pour permettre aux utilisateurs non-administrateurs d'utiliser les balises existantes dans un message, mais pas d'en créer de nouvelles. J'ai donc créé la solution suivante, qui fonctionne très bien, même si elle ne donne à l'utilisateur aucune information indiquant que ses balises n'ont pas été ajoutées (cela annule immédiatement la création de balises):

add_action('create_term','undo_create_term',10, 3);

function undo_create_term ($term_id, $tt_id, $taxonomy) {
    if ( !current_user_can( 'administrator' ) )  {
        if($taxonomy == 'post_tag') {
        wp_delete_term($term_id,$taxonomy);
        }
    }
}
5
murdaugh

Votre question m'a vraiment intriguée. Je peux voir une utilisation énorme de cette situation, je ferai donc tout ce qui est en mon pouvoir pour vous aider à trouver la réponse.

Voici une autre solution, pas exactement ce que vous avez mentionné dans votre commentaire sur l’autre réponse, mais cela permet aux utilisateurs de trouver plus facilement les tags qu’ils souhaitent, car ils sont classés par ordre alphabétique.

Plugin de capacité de gestion des balises - http://wordpress.org/extend/plugins/manage-tags-capability/

Notez également que cette méthode permet aux utilisateurs de sélectionner parmi TOUTES les balises disponibles. Je viens de me rendre compte que l’autre méthode permet uniquement aux utilisateurs de sélectionner les balises "les plus utilisées".

Wordpress effectue déjà une prévision automatique lors de la frappe des balises. Il est donc essentiel de trouver un moyen d'autoriser les utilisateurs à saisir le tag qu'ils souhaitent, mais pas d'en ajouter un s'ils ne le trouvent pas.

1
Travis Pflanz

Voici comment je résous le même problème (dans functions.php de votre thème):

/* Removing Tags for users */
if (is_admin()) :
function my_remove_meta_boxes() {
 if(!current_user_can('publish_posts')) { 
   remove_meta_box('tagsdiv-post_tag', 'post', 'normal');
 }
}
add_action( 'admin_menu', 'my_remove_meta_boxes' );
endif;

Nous vérifions d’abord si c’est la zone de l’administration, puis si l’utilisateur peut publier des messages (généralement des administrateurs et des éditeurs), puis nous effectuons notre magie avec remove_meta_box.

0
mayuxi