diff --git a/modules/graphql_compose_metatags/graphql_compose_metatags.module b/modules/graphql_compose_metatags/graphql_compose_metatags.module index 75aefc0dd570c23679a81603c16d8576263dbfc9..da18602b9ab3d3c8293cc69f54c086b196be3bca 100644 --- a/modules/graphql_compose_metatags/graphql_compose_metatags.module +++ b/modules/graphql_compose_metatags/graphql_compose_metatags.module @@ -7,6 +7,7 @@ declare(strict_types=1); +use Drupal\Core\Entity\EntityFieldManagerInterface; use Drupal\Core\Field\FieldDefinitionInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\graphql_compose\Plugin\GraphQLCompose\GraphQLComposeEntityTypeInterface; @@ -16,15 +17,27 @@ use Drupal\metatag\Form\MetatagDefaultsForm; * Implements hook_graphql_compose_entity_base_fields_alter(). */ function graphql_compose_metatags_graphql_compose_entity_base_fields_alter(array &$fields, string $entity_type_id): void { - static $supported_types; + static $enabled_types; + + if (!isset($enabled_types)) { + $enabled_types = []; + + /** @var EntityFieldManagerInterface $manager */ + $manager = \Drupal::service('entity_field.manager'); - if (!isset($supported_types)) { $supported_types = MetatagDefaultsForm::getSupportedEntityTypes(); + foreach (array_keys($supported_types) as $entity_type_id) { + $base_fields = $manager->getBaseFieldDefinitions($entity_type_id); + + // Check the entity has a meta tag field. + if (array_key_exists('metatag', $base_fields)) { + $enabled_types[$entity_type_id] = $entity_type_id; + } + } } - if (array_key_exists($entity_type_id, $supported_types)) { - // Metatag field on the entity type is not multiple, force multiple. - // 'metatag' field is a computed metatag_computed field type. + // Enable and force multiple. + if (array_key_exists($entity_type_id, $enabled_types)) { $fields['metatag'] = [ 'multiple' => TRUE, ];