Drupal - How do I get a list of all taxonomy terms assigned to a node?

Taxonomy terms are implemented in fields in Drupal 7. Assuming you have defined a taxonomy field named field_category for your content type, you can access it as:

$language = 'und'; // or will be provided by some Drupal hooks
foreach ($node->field_category[$language] as $delta => $value) {
  $term = taxonomy_term_load($value['tid']);
}

If you don't have access to the field name, probably the easiest way for nodes is to query the database directly:

$results = db_query('SELECT tid FROM {taxonomy_index} WHERE nid = :nid', array(':nid' => $node->nid));
foreach ($results as $result) {
  $term = taxonomy_term_load($result->tid);
}

Keep in mind though, that you may end up dealing a jumble of terms from different vocabularies if you have more than one taxonomy field.


Here's a very generic way to grab all terms without specifying field names and no db_query:

function example_get_terms($node) {
  $terms = array();

  foreach (field_info_instances('node', $node->type) as $fieldname => $info) {
    foreach (field_get_items('node', $node, $fieldname) as $item) {
      if (is_array($item) && !empty($item['tid']) && $term = taxonomy_term_load($item['tid'])) {
        $terms[] = $term->name;
      }
    }
  }
  return $terms;
}