Search code examples
phpjsontwigjson-ld

How can I force a twig variable to resolve to a string?


I have a twig template that generates JSON-LD at the bottom of a blog page. Here is a section of the JSON metadata:

    {% set dateString %}
        "datePublished": "{{ post.post_date|date('c') }}",
    {% endset %}
    {{ post.settings.hide_publish_date ? '' : '{{ dateString }}' }},

The output when I view the source code of the webpage is this:

"DatePublished": "{{ dateString }}",

What I expected to see was something like this:

"DatePublished": "2017-03-15T10:59:56+00:00",

How can I ensure that my variable dateString resolves to the expected value?


Solution

  • I was able to get the date value to output correctly by using the twig replace filter.

    {% set dateString %}
        "datePublished": "{{ post.post_date|date('c') }}",
    {% endset %}
    {{ post.settings.hide_publish_date ? '' : '%dateOutput%'|replace({'%dateOutput%': dateString}) }}
    

    The webpage now outputs the expected values to the JSON-LD:

    "DatePublished": "2017-03-15T10:59:56+00:00",