I need to add the article image to the post shared on facebook and twitter, this is done by meta tags added in the as shown below
<head>
<head-placeholder token="{{ placeholder_token|raw }}">
<title>{{ head_title|safe_join(' | ') }}</title>
<css-placeholder token="{{ placeholder_token|raw }}">
<js-placeholder token="{{ placeholder_token|raw }}">
{# RIGHT HERE #}
<meta name='og:image' content='{{ file_url(element['#object'].field_image.0.entity.uri.value) }}'>
<meta name="twitter:card" content="photo" />
<meta name="twitter:site" content="@nestle" />
<meta name="twitter:title" content="Article Picture" />
<meta name="twitter:description" content="A description" />
<meta name="twitter:image" content="{{ file_url(element['#object'].field_image.0.entity.uri.value) }}" />
<meta name="twitter:url" content="{{ base_path }}" />
</head>
I need to add meta tags in the in the html.html.twig file, the problem is those meta tags depend on the article being shared because I need to get the URL of the image, I cannot figure out how to do it such that a block of code written in the node.html.twig file would be placed in the in the html.html.twig file.
WHAT I TRIED i tried adding a block in start of node file and extending the html.html file node--article.html.twig (start of file) :
{% extends "html.html.twig" %}
{% block metablock %}
<meta name='og:image' content='{{ file_url(element['#object'].field_image.0.entity.uri.value) }}'>
<meta name="twitter:card" content="photo" />
<meta name="twitter:site" content="@nestle" />
<meta name="twitter:title" content="Article Picture" />
<meta name="twitter:description" content="A description" />
<meta name="twitter:image" content="{{ file_url(element['#object'].field_image.0.entity.uri.value) }}" />
<meta name="twitter:url" content="{{ base_path }}" />
{% endblock %}
then calling this block from the html.html file like this:
<head>
<head-placeholder token="{{ placeholder_token|raw }}">
<title>{{ head_title|safe_join(' | ') }}</title>
<css-placeholder token="{{ placeholder_token|raw }}">
<js-placeholder token="{{ placeholder_token|raw }}">
{# RIGHT HERE #}
{{ block('metablock') }}
</head>
But this gives an error
The website encountered an unexpected error. Please try again later.Twig_Error_Syntax: A template that extends another one cannot include contents outside Twig blocks.
I tried putting the rest of code in node--article inside a block, this does work but the metablock block gets placed in the start of every article viewport (Not what I intended) I need it to be placed only in the head tag.
Hope I was clear enough, to summarize, How can I place meta tags in the head from the node--article.html file, not the html.html file.