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; } } } } } /** * Returns all available page variants. * * @return string[] * A list of page variants keyed by label. */ function _metatag_page_manager_get_variants() { /** @var \Drupal\page_manager\Entity\PageVariant[] $variants */ $variants = PageVariant::loadMultiple(); $variant_options = []; // Load all metatag defaults so we can filter the variants which already have // a metatag default configured. $metatag_defaults = MetatagDefaults::loadMultiple(); foreach ($variants as $key => $variant) { $id = $variant->getEntityType()->id() . '__' . $key; if (!isset($metatag_defaults[$id])) { $label = $variant->getPage()->label() . ' : ' . $variant->label(); $variant_options[$id] = $label; } } return $variant_options; } /** * Implements hook_metatag_alter(). */ function metatag_page_manager_metatags_alter(array &$metatags, array &$context) { if (!$context['entity'] instanceof PageVariant) { return; } $key = $context['entity']->getEntityType()->id() . '__' . $context['entity']->id(); $metatag_variant = MetatagDefaults::load($key); if ($metatag_variant) { $metatags = array_merge($metatags, $metatag_variant->get('tags')); } } /** * Implements hook_metatag_route_entity(). */ function metatag_page_manager_metatag_route_entity(RouteMatchInterface $route_match) { if ($variant = $route_match->getParameter('page_manager_page_variant')) { return $variant; } }