diff --git a/metatag.module b/metatag.module index a3d0ede..1a9e68c 100644 --- a/metatag.module +++ b/metatag.module @@ -435,14 +435,14 @@ function metatag_get_default_tags($entity = NULL) { $entity_metatags = $global_metatag_manager->load($entity->getEntityTypeId()); if ($entity_metatags != NULL) { // Merge with global defaults. - $metatags->overwriteTags($entity_metatags->get('tags')); + $metatags->overwriteTags(metatag_filter_empty_tokens($entity_metatags->get('tags'), $entity)); } // Finally, check if bundle overrides should be added. $bundle_metatags = $global_metatag_manager->load($entity->getEntityTypeId() . '__' . $entity->bundle()); if ($bundle_metatags != NULL) { // Merge with existing defaults. - $metatags->overwriteTags($bundle_metatags->get('tags')); + $metatags->overwriteTags(metatag_filter_empty_tokens($entity_metatags->get('tags'), $entity)); } } } @@ -450,6 +450,22 @@ function metatag_get_default_tags($entity = NULL) { return $metatags->get('tags'); } +/** + * Removes tags that generate empty strings to prevent them from overwriting potentially non-empty parent tags. + * + * @return mixed + * Array of tags; + */ +function metatag_filter_empty_tokens($tags, $entity) { + foreach ($tags as $key => $value) { + $replaced = \Drupal::token()->replace($value, [$entity->getEntityType()->id() => $entity], ['clear' => TRUE]); + if(empty($replaced)) { + unset($tags[$key]); + } + } + return $tags; +} + /** * Implements hook_entity_base_field_info(). */