Comment ne pas autoriser les utilisateurs à créer de nouveaux tags, mais leur permettre d'utiliser ceux existants

9

Je veux qu'un certain rôle puisse ajouter de nouvelles balises, mais les autres utilisateurs devraient simplement pouvoir utiliser la barre de texte pour rechercher des balises existantes.

Je sais que je peux masquer la barre de balises dans la barre latérale, mais je ne le veux pas. Je veux juste qu'il dise "Désolé, cette balise n'existe pas" ou quelque chose quand quelqu'un entre une balise qui n'existe pas.

Existe-t-il un plugin ou une fonction qui fera ça pour moi?

Jorn Reuvers
la source

Réponses:

10

Vous pouvez vous connecter pre_insert_term, vérifier la taxonomie et si l'utilisateur a ou non le rôle spécifié comme suit:

function disallow_insert_term($term, $taxonomy) {

    $user = wp_get_current_user();

    if ( $taxonomy === 'post_tag' && in_array('somerole', $user->roles) ) {

        return new WP_Error(
            'disallow_insert_term', 
            __('Your role does not have permission to add terms to this taxonomy')
        );

    }

    return $term;

}

add_filter('pre_insert_term', 'disallow_insert_term', 10, 2);

Cela empêchera l'utilisateur d'insérer de nouveaux termes, mais lui permettra de rechercher et d'ajouter des termes existants à un message.

Attention, lorsque sur l'écran de post-édition, un utilisateur peut entrer un nom de terme qui n'existe pas et appuyer sur Entrée ou cliquer sur le bouton Ajouter qui ajoutera le terme au DOM mais à ce stade, le terme n'est pas ajouté à la base de données jusqu'à ce que le l'utilisateur publie ou met à jour la publication à quel point le terme sera refusé.

Adam
la source
Salut, merci pour l'aide :) J'ai essayé cela, mais il ne semble rien faire. Je vais être honnête et dire que c'est probablement ma faute. J'ai copié collé votre code dans mes fonctions et bien sûr changé le bit 'somerole'. L'ajout de balises est toujours possible pour ce rôle.
Jorn Reuvers
Quel est le rôle d'utilisateur que vous essayez d'empêcher? Essayez-vous également d'empêcher les balises pour la taxonomie correcte, dans ce cas post_taget pas une autre taxonomie comme categoriesou une taxonomie personnalisée?
Adam
J'essaie d'empêcher le rôle d'éditeur de le faire pour le moment. Et c'est la taxonomie standard (donc ça devrait être post_tag), je n'ai encore rien créé car je suis encore en train de tester.
Jorn Reuvers
Il est alors temps de commencer le débogage. En wp-config.phpdéfinir les constantes suivantes, define('WP_DEBUG', true);, define('WP_DEBUG_LOG', true);et define('WP_DEBUG_DISPLAY', false);puis dans la fonction extrait ci - dessus, connectez - vous un appel à error_log($taxonomy);un autre appel à error_log(implode(', ', $user->roles));puis ajouter une étiquette puis mettre à jour le poste, ce sera alors créer un debug.logfichier dans le wp-contentrépertoire. Vous devez déterminer si cette fonction est appelée ou non et si elle entre correctement l'instruction conditionnelle, car ce rappel fonctionne pour moi.
Adam