Read-only taxonomy (user can assign term but can’t create or edit existing terms)

I’m creating a custom taxonomy whose terms must remain fixed by all users. Once I’ve set up the starting set of terms, I want them to be immutable. I also don’t want to clutter up the Admin UI with additional links and metaboxes where they’re not needed.

However, setting public => 'false', or show_ui => 'false' not only hides the manage tax link, but also prevents the user from assigning the term to a new post.

I need a way to hide the “manage” link within the post type pulldown, show the term selector metabox on the post page, but (hopefully) disable the “Add Term” option at the bottom of this metabox.

Does such a feature exist? Or are taxonomies always supposed to be user editable?

Custom taxonomy capabilities get me most of the way there, since you can independently set CRUD rights based on capability. But how to disable even admins from modification? (I know this sounds like a bad idea but it’s viable.)

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

A bit late but thought this could use updating.

Create your custom taxonomy and add the terms you need, then go back to your register_taxonomy() function and set the capabilities argument (which itself accepts an array of capabilities). You can see how I setup sex for dogs which can only ever have two values–”Male” or “Female”, which I input. Now admins can only assign a dog to a sex but cannot add, delete, or edit the sexes.

register_taxonomy('sex', 'dog', array(
  'capabilities' => array(
    'manage_terms' => '',
    'edit_terms' => '',
    'delete_terms' => '',
    'assign_terms' => 'edit_posts'
  ),
  'label' => 'Sex',
  'labels' => array(
    'name' => 'Sex',
    'add_new_item' => 'Add New Sex',
    'new_item_name' => "Add New Sex"
  ),
  'public' => true,
  'show_admin_column' => true,
  'show_in_nav_menus' => false,
  'show_tagcloud' => false,
  'show_ui' => true,
  'hierarchical' => true
));

Works on hierarchical taxonomies; I did not try non-hierarchical but it should work there too.

Method 2

You talking categories (hierarchical) or tags? You just need a hidden taxonomy + custom widget. If it’s categories, it easier to do, if tags… depends if the number of items is decent. And you can hide them from public view only for non-Administrators. That way you can manage them easily while the others can’t touch them.

Thanks.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x