GELÖST - Liquid von Metafield Produkte auf Metafield Variante erweitert - funktioniert nicht

Topic summary

Thema: Lieferzeit-Anzeige in Shopify Liquid um Varianten-Metafeld erweitert, zunächst ohne Wirkung.

  • Ausgangslage: Ein funktionierendes Snippet nutzte ein Produkt-Metafeld (shipping_time/versandzeit). Nach Erweiterung auf variant.metafields.custom.versandzeit blieb das Datum unverändert, obwohl das Varianten-Metafeld befüllt war.

  • Ursache/Lösung: Auf Produktseiten muss die aktuell gewählte Variante referenziert werden. Korrekt ist product.selected_or_first_available_variant.metafields.custom.versandzeit statt variant.metafields… Fallback-Reihenfolge: Produkt-Metafeld → Varianten-Metafeld → Standard 3 Tage. Das Datum wird als Intervall (Start + End) aus Unix-Zeit berechnet und im Format TT.MM.JJJJ ausgegeben.

  • Update: Erweiterte Version berücksichtigt Sonntage und vordefinierte Feiertage (25.12, 01.01, 01.05) im aktuellen Jahr. Fällt Start- oder Enddatum auf Sonntag oder einen dieser Feiertage, wird jeweils um einen Tag verschoben. Berechnung erfolgt mit Sekunden (86400) ab “now”.

  • Ergebnis/Status: Problem gelöst; funktionsfähige Lösung mit Variantenbezug und optionaler Sonn-/Feiertags-Logik. Diskussion abgeschlossen.

Summarized with AI on December 17. AI used: gpt-5.

Hallo Liebe Leute,

ich habe folgendes funktionierendes Liqud verändert:

{% if product.selected_or_first_available_variant.available %}

       {% if product.gift_card? %} PDF Downloads und Geschenkkarten werden sofort per E-Mail verschickt.

       {% else %}

         {%- if product.metafields.custom.shipping_time -%}

           {% assign ShippingTime = product.metafields.custom.shipping_time %}

         {%- else -%}

         {% assign ShippingTime = 3 %}

        {%- endif -%}  

     {% assign daysStart = ShippingTime | times: 86400 %}

     {% assign daysEnd = ShippingTime | plus: 3 | times: 86400 %}

         Vorraussichtliche Lieferung: {{ "now" | date: "%s" | plus: daysStart | date: "%d.%m.%Y" }} - {{ "now" | date: "%s" | plus: daysEnd | date: "%d.%m.%Y" }}

     {% endif %}

   {% endif %}

zu

{% if product.selected_or_first_available_variant.available %}

  {% if product.gift_card? %}

    PDF Downloads und Geschenkkarten werden sofort per E-Mail verschickt.

  {% else %}

    {%- if product.metafields.custom.versandzeit -%}

      {% assign ShippingTime = product.metafields.custom.versandzeit %}

    {%- elsif variant.metafields.custom.versandzeit -%}

      {% assign ShippingTime = variant.metafields.custom.versandzeit %}

    {%- else -%}

      {% assign ShippingTime = 3 %}

    {%- endif -%}

    {% assign daysStart = ShippingTime | times: 86400 %}

    {% assign daysEnd = ShippingTime | plus: 3 | times: 86400 %}

    Vorraussichtliche Lieferung: {{ "now" | date: "%s" | plus: daysStart | date: "%d.%m.%Y" }} - {{ "now" | date: "%s" | plus: daysEnd | date: "%d.%m.%Y" }}

  {% endif %}

{% endif %}

Das Problem ist, dass die Lieferzeit richtig ausgegeben wird wenn ich das product.metalields.custom.lieferzeit fülle und wenn ich bei variant.metafields.custom.lieferzeit etwas eintrage passiert, das datum bleibt gleich.

Ich habe keine Idee warum - hat jemand eine zündende Idee ?

Viele Grüße,

Marc

Hab es schon geschafft. ChatGPT ist schon geil :slightly_smiling_face: Hier die Lösung:

{% if product.selected_or_first_available_variant.available %}

{% if product.gift_card? %}

PDF Downloads und Geschenkkarten werden sofort per E-Mail verschickt.

{% else %}

{%- if product.metafields.custom.versandzeit -%}

{% assign ShippingTime = product.metafields.custom.versandzeit %}

{%- elsif product.selected_or_first_available_variant.metafields.custom.versandzeit -%}

{% assign ShippingTime = product.selected_or_first_available_variant.metafields.custom.versandzeit %}

{%- else -%}

{% assign ShippingTime = 3 %}

{%- endif -%}

{% assign daysStart = ShippingTime | times: 86400 %}

{% assign daysEnd = ShippingTime | plus: 3 | times: 86400 %}

Vorraussichtliche Lieferung: {{ “now” | date: “%s” | plus: daysStart | date: “%d.%m.%Y” }} - {{ “now” | date: “%s” | plus: daysEnd | date: “%d.%m.%Y” }}

{% endif %}

{% endif %}

OHNE Gewähr

Eine Version die noch Sonn und vorher definierte Feiertage berücksichtigt

{% assign holidays = "25.12,01.01,01.05" | split: "," %}
{% assign current_year = "now" | date: "%Y" %}

{% assign ShippingTime = 3 %}

{%- if product.metafields.custom.versandzeit -%}
{% assign ShippingTime = product.metafields.custom.versandzeit %}
{%- elsif product.selected_or_first_available_variant.metafields.custom.versandzeit -%}
{% assign ShippingTime = product.selected_or_first_available_variant.metafields.custom.versandzeit %}
{%- endif -%}

{% assign daysStart = ShippingTime | times: 86400 %}
{% assign daysEnd = ShippingTime | plus: 3 | times: 86400 %}

{% assign deliveryStart = "now" | date: "%s" | plus: daysStart %}
{% assign deliveryEnd = "now" | date: "%s" | plus: daysEnd %}

{%- assign deliveryStartDay = deliveryStart | date: "%w" -%}
{%- assign deliveryEndDay = deliveryEnd | date: "%w" -%}

{% comment %}
Überprüfen, ob das Start- oder Enddatum auf einen Sonntag fällt
{% endcomment %}
{%- if deliveryStartDay == '0' -%}
{% assign deliveryStart = deliveryStart | plus: 86400 %}
{%- endif -%}
{%- if deliveryEndDay == '0' -%}
{% assign deliveryEnd = deliveryEnd | plus: 86400 %}
{%- endif -%}

{% comment %}
Feiertage berücksichtigen, dynamisch mit dem aktuellen Jahr
{% endcomment %}
{%- for holiday in holidays -%}
{%- assign holiday_with_year = holiday | append: "." | append: current_year -%}

{% assign deliveryStart_formatted = deliveryStart | date: "%d.%m.%Y" %}
{% assign deliveryEnd_formatted = deliveryEnd | date: "%d.%m.%Y" %}

{% comment %}
Prüfen, ob das Start- oder Enddatum ein Feiertag ist
{% endcomment %}
{%- if deliveryStart_formatted == holiday_with_year -%}
{% assign deliveryStart = deliveryStart | plus: 86400 %}
{%- endif -%}
{%- if deliveryEnd_formatted == holiday_with_year -%}
{% assign deliveryEnd = deliveryEnd | plus: 86400 %}
{%- endif -%}
{%- endfor -%}

Vorraussichtliche Lieferung: {{ deliveryStart | date: "%d.%m.%Y" }} - {{ deliveryEnd | date: "%d.%m.%Y" }}