Drupal 7: Assigning vocabularies with Field API
This took me far too long to figure out, but here's how you create a vocabulary, and then a taxonomy field and instance, all through an .install file (or anywhere else you really care to put it). Took a bunch of debugging before I hit on the right magical combination. This is part of a demo I'm working on for the Drupal 7 and FRBR mental model I published last night.
$libdb_vocabulary_endeavorers = (object) array( 'name' => 'Endeavorers', 'machine_name' => 'libdb_endeavorers', 'description' => t('FRBR Group 2 entities: Persons and Corporate Bodies.'), 'help' => t('Enter a comma-separated list of persons or corporations.'), ); taxonomy_vocabulary_save($libdb_vocabulary_endeavorers); $vocabularies = taxonomy_vocabulary_get_names(); $libdb_m_group2_field = array( 'field_name' => 'libdb_m_authors', 'type' => 'taxonomy_term', 'cardinality' => FIELD_CARDINALITY_UNLIMITED, 'settings' => array( 'allowed_values' => array( array( 'vid' => $vocabularies['libdb_endeavorers']->vid, 'parent' => 0, ), ), ), ); $libdb_m_group2_instance = array( 'field_name' => 'libdb_m_authors', 'object_type' => 'node', 'label' => 'Authors', 'bundle' => 'libdb_book', 'required' => TRUE, 'description' => t('Enter a comma-separated list of persons or corporations.'), 'widget' => array( 'type' => 'taxonomy_autocomplete', ), ); field_create_field($libdb_m_group2_field); field_create_instance($libdb_m_group2_instance);