Add lastmod, changefreq and changecount to sitemap.xml for taxonomy terms by the xmlsitemap module

Estimated reading time of this article: 2 minutes

By default lastmod, changefreq and changecount are not written to the sitemap.xml for taxonomy terms by the xmlsitemap module. Fortunately, there is a hook for changing this. The result can be seen on sitemap.xml.

<?php/** * Fetch all timestamps when a taxonomy term or his direct child was changed. * * @param $node *   A node object. * @return *   An array of UNIX timestamp integers. */function _YOUR_MODULE_term_get_timestamps(stdClass $term) {  static $term_timestamps = array();  if (!isset($term_timestamps[$term->tid])) {    $term_timestamps[$term->tid] = db_query("SELECT ti.created FROM {taxonomy_index} ti WHERE ti.tid = :tid      UNION ALL      SELECT ti.created FROM {taxonomy_term_hierarchy} th, {taxonomy_index} ti WHERE th.parent = :tid AND th.tid = ti.tid", array(':tid' => $term->tid))->fetchCol();  }  return $term_timestamps[$term->tid];}/** * Add changefreq, changecount and lastmod for taxonomy terms. * * Implements hook_xmlsitemap_link_alter. * * @param $link *   An array with the data of the sitemap link. */function YOUR_MODULE_xmlsitemap_link_alter(&$link) {  if ($link['type'] == 'taxonomy_term') {    // dpm($link, 'link');    $tid = $link['id'];    $term = taxonomy_term_load($tid);    // dpm($term);    // Always recalculate changefreq and changecount.    $timestamps = _YOUR_MODULE_term_get_timestamps($term);    $link['changefreq'] = $term->tid ? xmlsitemap_calculate_changefreq($timestamps) : 0;    $link['changecount'] = $term->tid && (count($timestamps) > 0) ? count($timestamps) - 1 : 0;    $link['lastmod'] = count($timestamps) > 0 ? max($timestamps) : 0;  }}?>