web-dev-qa-db-fra.com

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

Je souhaite 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 d’étiquette dans la barre latérale, mais je ne le souhaite 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.

Y at-il un plugin ou une fonction qui le fera pour moi?

6
Jorn Reuvers

Vous pouvez vous connecter à pre_insert_term, vérifier la taxonomie et indiquer si l'utilisateur a 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 à une publication.

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. Toutefois, à ce stade, le terme n'est pas ajouté à la base de données tant que le l'utilisateur publie ou met à jour le message à quel moment le terme sera interdit.

6
userabuser