Custom Taxonomy as “Post Meta”

I found this post while sorting through my old drafts and decided to go ahead and publish it rather than trashing it. Hopefully the code samples don’t break too badly in WordPress 3.9.

I’ve talked a bit about when to use custom taxonomies and when to use custom fields/post meta (and how they can be used virtually interchangeably in some situations). If you want to use taxonomies, you’ll probably also want to:

  • make sure that the terms you want to use exist in your custom taxonomy
  • limit the ability for these terms to be altered

This Gist is a good start:


<?php
// check for a term and insert it if it doesn't exist
if (!get_term_by('slug', $term_slug, $taxonomy)) {
wp_insert_term(__($term_name, 'localization-key'), $taxonomy, array(
'slug' => $term_slug
));
}


// remove all functionality from hierarchical taxonomy UI box (other than term selection)
// *and* convert the checkboxes to radio buttons to enforce single selection (this is untested)
$('#taxonomy-' + yourTaxonomyName)
.find('.category-tabs, div:not(".tabs-panel")').remove().end()
.find('.tabs-panel').removeClass('tabs-panel').end()
.find('input[type="checkbox"]').attr('type', 'radio');


// remove all functionality from hierarchical taxonomy UI box (other than term selection)
$('#taxonomy-' + yourTaxonomyName)
.find('.category-tabs, div:not(".tabs-panel")').remove().end()
.find('.tabs-panel').removeClass('tabs-panel');

You’ll probably also want to specify:

'public' => false,
'show_ui' => true,

when defining your custom taxonomy. This makes the UI box for the taxonomy appear in the post/page editing interface as expected, but hides the admin forms for editing the taxonomy terms from the admin menu.