You are here

function metatag_page_manager_page_attachments in Metatag 8

Implements hook_page_attachments().

File

metatag_page_manager/metatag_page_manager.module, line 24
Contains metatag_page_manager.module.

Code

function metatag_page_manager_page_attachments(array &$attachments) {

  // Fetch entity from request.
  $entity = \Drupal::request()->attributes
    ->get('_entity');
  if ($entity) {
    $key = $entity
      ->getEntityType()
      ->id() . '__' . $entity
      ->id();

    // Get default metatags.
    $metatag_defaults = metatag_get_default_tags();

    // Load page variant metatags.
    $metatag_variant = MetatagDefaults::load($key);
    if ($metatag_variant) {

      // Overwrite the metatag defaults with the tags of the page variant.
      $metatag_defaults = array_merge($metatag_defaults, $metatag_variant
        ->get('tags'));

      // Set the metatag in the static metatag attachments parameter so the
      // metatag module wouldn't overwrite them.
      $metatag_attachments =& drupal_static('metatag_attachments');
      $metatag_manager = \Drupal::service('metatag.manager');
      $metatag_attachments = $metatag_manager
        ->generateElements($metatag_defaults, $entity);

      // If any Metatag items were found, append them.
      if (!empty($metatag_attachments['#attached']['html_head'])) {
        if (empty($attachments['#attached'])) {
          $attachments['#attached'] = [];
        }
        if (empty($attachments['#attached']['html_head'])) {
          $attachments['#attached']['html_head'] = [];
        }
        foreach ($metatag_attachments['#attached']['html_head'] as $item) {
          $attachments['#attached']['html_head'][] = $item;
        }
      }
    }
  }
}