Cómo Modificar Una Metatag En Drupal
Cambia su valor fácilmente usando este hook
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 🔥