Cómo Modificar Una Metatag En Drupal

Cambia su valor fácilmente usando este hook

Sergio Guardiola Herrador
2 min readJan 18, 2022
Photo by Luca Bravo on Unsplash

Las metatags se utilizan para describir el contenido de una página. Drupal tiene un módulo que te permite administrarlas fácilmente: https://www.drupal.org/project/metatag

Idealmente, siempre debes intentar configurarlas usando la página de administración del módulo. En caso de que no puedas encontrar un token adecuado para usar, también puedes crear el tuyo propio y usarlo en el módulo metatag.

Lo que voy a explicar es cómo modificar una metatag existente. Esto puede resultarte útil en casos en los que necesites implementar alguna lógica y no deseas crear un token para ello.

Para el siguiente ejemplo, estoy editando la metatag “twitter_cards_title”. Asegúrate de agregar una condición para verificar el nombre; de lo contrario, también aplicarás los cambios a otras metatags.
Tengo un tipo de contenido “thank_you_page” que tiene un campo de referencia de entidad que carga nodos de tipo “campaign”.
El código verifica si field_tweet_text está vacío en el nodo principal (campaign). Si no lo está, ese valor se usa para la metatag, si lo está, entonces el título del nodo se usa como valor.

Puedes encontrar más información sobre este hook aquí. Si tienes alguna pregunta, no dudes en dejar un comentario.

/**
* Implements hook_page_attachments_alter().
* @param array $page
* @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
*/
function custom_module_page_attachments_alter(array &$page) {
foreach ($page['#attached']['html_head'] as $key => $tag) {
if (isset($tag[1]) && $tag[1] == 'twitter_cards_title') {
$node = \Drupal::routeMatch()->getParameter('node');
if ($node != null && is_object($node) && $node->bundle() === 'thank_you_page') {
$reference = $node->get('field_parent_node')->getValue();
$uri = $reference[0]['uri'];
$parent_nid = str_replace('entity:node/', '', $uri);
if (!empty($parent_nid)) {
$parent_node = \Drupal::entityTypeManager()->getStorage('node')->load($parent_nid);
if ($parent_node->get('field_tweet_text')->isEmpty()) {
$tweet_text = $parent_node->getTitle();
}
else {
$tweet_text = $parent_node->get('field_tweet_text')->get(0)->getString();
}
$page['#attached']['html_head'][$key][0]['#attributes']['content'] = $tweet_text;
}
}
}
}
}

👉 Encuentra más sobre mí aquí: https://sergioguardiola.net 🔥

--

--

Sergio Guardiola Herrador
Sergio Guardiola Herrador

Written by Sergio Guardiola Herrador

I write articles in English and Spanish, mostly about programming, technology, travel, money, investing. You can find me here: https://sergioguardiola.net

No responses yet