I'm attempting to create taxonomy terms in a module that provides the vocabulary needed to create these terms.

The issue I'm having is the vocabulary is not available upon install.

My module implements hook_taxonomy_default_vocabularies. I would like to create these terms in hook_install.

What is the best way to create these terms?


Although you can use hook_install(), it's best to use hook_enable() to check if the vocabulary exists and, if not, create it programatically:

$vocabularies = taxonomy_vocabulary_get_names();
$pos = array_search('my_vocabulary', $vocabularies);

if ($pos !== FALSE) {
  // its a keyed array so the $vid is actually $pos
  $vid = $pos;
} else {
  // arrays are more convenient to initialize
  $vocabulary = array(
     'name' => t('My Vocabulary'),
     'machine_name' => 'my_vocabulary',
     'description' => t('My description'),
     'hierarchy' => 1,
     'module' => 'your_module', // or nothing
     'weight' => 1
   // argument must be an object
   $vocabulary = (object) $vocabulary;
   // horray, we have a vid now
   $vid = $vocabulary->vid;

// now that the vocab exists and you know the $vid, create your terms
// ...
  • 1
    I ended up removing features taxonomy export and just moving it to hook_install. Basically what you put here. Thanks for input. – troynt Apr 20 '11 at 0:15
  • 1
    how do you establish a relationship with a content type? – Aditya M P Apr 13 '12 at 6:04
  • oh sorry, I forgot this is done from the contenttype's end rather than the vocabulary's now in 7 – Aditya M P Apr 13 '12 at 6:07

Your Answer

