I have a node and want to get all the taxonomy terms assigned to the node.

In drupal 6 I could use $node->taxonomy and the taxonomy_* functions but these don't exist in drupal 7.

2 Answers 2


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.

  • What if I don't know the taxonomy field name? The names will differ between content types and I want to get all of the terms for any node.
    – Rwky
    Aug 7, 2011 at 15:44
  • 1
    Added a method if you don't know the field name.
    – keithm
    Aug 7, 2011 at 16:02
  • 4
    Especially in the second version, you can use taxonomy_term_load_multiple($results->fetchCol()); to load the terms in a single query.
    – Berdir
    Nov 19, 2011 at 11:29
  • 1
    Oh, and you can use field_get_items('node', $node, 'field_category') to get the fields in the correct language.
    – Berdir
    Nov 19, 2011 at 11:32
  • Note the select from taxonomy_index technique works only with published nodes. That table is not maintained for unpublished content.
    – Dave Cohen
    Dec 7, 2013 at 13:59

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;
  • For Drupal beginner, i would add if (arg(0) == 'node' && is_numeric(arg(1))) {$nid = arg(1);} to get the nid and $node = node_load($nid); in order to make your function work. Apr 7, 2017 at 8:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.