Liquid-variabler i Shopify Flow

Variabler är platshållare som ersätts med värden när en arbetsflöde körs. Dessa variabler beskriver attribut för kunder, ordrar och produkter som ingår i dina arbetsflöden. Det finns till exempel variabler för ordernummer, orderpris, kundnamn med mera. Variabler kan användas i villkor för att kontrollera logiken i ditt arbetsflöde eller för att mata ut data i en åtgärd.

Om Liquid

Liquid är ett mallspråk som används för att komma åt variabler i åtgärder och för att skriva kod i Flow. Flow använder en variant av Liquid som närmast följer biblioteket med öppen källkod. Shopify-teman använder en annan variant av Liquid, men denna variant av Liquid är specifik för teman och innehåller många fler filter och taggar än vad Flow stöder, samt en annan syntax för åtkomst till variabler.

Liquid-variabler

Du kan lägga till Liquid-variabler i alla textfält som innehåller länken Lägg till en variabel. Klicka på länken Lägg till variabel under relevant fält och välj sedan en variabel från listan.

bild som visar vilka fält som accepterar liquid

Variablerna i listan Lägg till en variabel filtreras så att du bara ser variablerna returneras i steg innan det aktuella steget, till exempel utlösare. Till exempel tillhandahåller utlösaren Order skapad order- och butiksresurser, som gör att du kan använda dig av alla variabler som är relaterade till ordern eller dina butiksinställningar som är tillgängliga i GraphQL Admin API. När du har valt en variabel från listan är den formaterad på rätt sätt och läggs till i textrutan åt dig.

Du kan också skriva liquid direkt i textblocket. Du kan till exempel använda variabeln {{ order.name }} för att visa ordersträngen som visas i Shopify-admin, till exempel order-123.

Eftersom Flow använder GraphQL Admin-API för att hämta data som du använder i Liquid, använder den variabelsyntaxen "kamelnotation". Om du till exempel vill komma åt datumet då en produkt skapades anger du {{ product.createdAt }}. Om du använder Liquid-syntaxen i ett Shopify-tema anger du {{ product.created_at }}.

Liquid-taggar för villkorande och iteration

Ibland kan du vilja använda Liquid-taggar för att göra följande:

  • Skriv villkorande påståenden, till exempel för att avgöra om en ordersumma är större än 100 USD
  • Iterera genom en lista över objekt, till exempel utdata för varje radobjekt i en order

Du kan använda Liquid-taggar för att skriva dessa påståenden och iterera genom objekt.

Till exempel visar följande Liquid ordernumret om ordersumman är större än 100 USD:

{% if order.totalPriceSet.shopMoney.amount > 100 %}
  Order number: {{ order.name }}
{% endif %}

Du kan även använda en för loop för att iterera genom en lista över objekt, till exempel radartiklar för en order. Följande Liquid visar till exempel namnet på varje radartikel i en order:

{% for li in order.lineItems %}
  {{ li.title }}
{% endfor %}

Flow stöder följande villkors-taggar för Liquid (eller kontrollflöde):

Flow stöder även följande Liquid iteration-taggar:

Filter

Filter gör det möjligt för dig att omvandla data i Liquid. Flow stöder alla Liquid-filter med öppen källkod.

Till exempel tar följande Liquid bort ett prefix från ett ordernamn och matar ut det som finns kvar: {{ order.name | remove: "Order-" }}

Förutom standard-Liquid-filtren tillhandahåller Flow datumfilter för att få ett datum i förhållande till ett annat datum för att stödja funktionerna Schemalagd tidsutlösare och Få data . Dessa filter är: date_minus och date_plus.

Så här returnerar du ett datum en dag i framtiden:{{ "now" | date_plus: "1 day" }}

Så här returnerar du ett datum en dag som gått:{{ "now" | date_minus: "1 day" }}

Dessa filter accepterar second, minute, day, week, month och year som varaktighetsenhet, både singular (t.ex. second) och plural (t.ex. seconds). Förutom det här formatet kan du även ange ett heltal (antal sekunder). Till exempel:{{ "now" | date_minus: 3600 }}

Du kan även leverera en ISO8601-varaktighetssträng, där P1Y2D betyder 1 år och 2 dagar:{{ "now" | date_minus: "P1Y2D" }}

Överväganden för användning av Liquid-variabler i filter

  • Flow stöder inte dot-notation som är tillgänglig för vissa filter. Flow stöder till exempel {{ order.lineItems | size }} men inte {{ order.lineItems.size }}.
  • Flow stöder inte dot-notation för metafält. Du kan till exempel inte använda {{ order.metafields.custom.hold_note }}. Istället måste du loopa över metafälten som beskrivs i exemplen.
  • Flow stöder inte användning av index för att komma åt objekt i en lista. Du kan till exempel inte använda {{ order.lineItems[0].title }}. Istället måste du loopa över radobjekten så som beskrivs i exemplen.

Exempel

Överväg följande exempel för att få en bättre känsla av hur du använder Liquid-variabler.

Mata ut ett metafältvärde

Du vill mata ut värdet för ett order-metafält i ett e-postmeddelande. Metafältet är en sträng och har en namnrymd på custom och en nyckel på hold_note. Värdet för detta metafält är Please wait to deliver this order until April 1.. Du skapar ett arbetsflöde med hjälp av utlösaren Order skapad och använder åtgärden Skicka internt e-postmeddelande. I avsnittet Meddelande i åtgärden Skicka internt e-postmeddelande använder du följande variabler.

Exempel på variabel användning för att mata ut en orders metafält.
Indata Utdata
{% assign hold_note = order.metafields | where: "namespace", "custom" | where: "key", "hold_note" | first %}
Ordern har en anteckning om vänteläge: {{ hold_note.value }}
Ordern har en anteckning om vänteläge: Vänta med att leverera denna order fram till 1 april.

Konvertera en lista med taggar till ett metafält

Du vill konvertera en uppsättning taggar till ett metafält som är en lista över textfält med en enda rad. Du skapar ett arbetsflöde med hjälp av utlösaren Produkt tillagd till butik och använder åtgärden Uppdatera metafält för produkt. I avsnittet Värde i åtgärden Uppdatera produktmetafält lägger du till följande liquid-kod. Det här exemplet förutsätter att du bara behöver ställa in värdena en gång när produkten skapas och att produkten har två relevanta taggar: color:red och color:orange.

Exempel på liquid för att konfigurera listan över ett textfält med en rad.
Indata Utdata
{% capture mf_value %}
{%- for tags_item in product.tags -%}
{%- if tags_item contains "color:" -%}
"{{- tags_item | remove_first: "color:" | strip -}}",
{%- endif -%}
{%- endfor -%}
{% endcapture -%}
[{{mf_value | remove_last: ","}}]
["röd","orange"]

Skriv ett dynamiskt e-postmeddelande för en order

Du vill skapa ett arbetsflöde för att skicka ett e-postmeddelande till en anställd när en kund spenderar mer än 500 USD på en order. Du skapar ett arbetsflöde med hjälp av utlösaren Order skapad, anger ett villkor som är sant om ordersumman är över 500 USD och använder åtgärden Skicka internt e-postmeddelande. I avsnittet Meddelande i åtgärden Skicka internt e-postmeddelande använder du följande variabler.

Exempel på variabelanvändning för att tillhandahålla kunduppgifter.
Indata Utdata
Skicka en personlig tackhälsning till {{ order.customer.firstName }} {{ order.customer.lastName }}({{ order.customer.email }}) för att de lade en order på {{ order.totalPriceSet.shopMoney.amount }} USD. Skicka en personlig tackhälsning till Jeanne Dupont (jeanne@example.com) för att de lade en order på 763,42 USD.

Skriv ett dynamiskt e-postmeddelande för en produkt som har låg lagernivå

Du bestämmer dig för att du behöver informera en medarbetare när produktlagret börjar bli lågt och en order måste läggas på fler lagerartiklar. Du skapar ett arbetsflöde som startar med utlösaren Lagerkvantitet ändrad och anger ett villkor som är sant om den tidigare lagerkvantiteten är mindre än eller lika med 10. I avsnittet Meddelande i åtgärden Skicka internt e-postmeddelande använder du följande variabler.

Exempel på variabelanvändning för att tillhandahålla artikelinformation.
Indata Utdata
Återbeställ {{ product.title }}. Skicka ett e-postmeddelande till owner@store.com för att verifiera att de har tagit emot inköpsordern. Återbeställ Leggings med hög midja – svarta. Skicka ett e-postmeddelande till owner@example.com för att verifiera att de har tagit emot inköpsordern.

Skriv ett dynamiskt e-postmeddelande för att meddela personal om en bedräglig order

Du vill annullera ordrar med hög risknivå men föredrar att din personal annullerar ordern manuellt. Du skapar ett arbetsflöde som startar med utlösaren Order skapad och anger ett villkor som är sant om risknivån för ordern är lika med hög. I avsnittet Meddelande i åtgärden Skicka internt e-postmeddelande använder du följande variabler.

Exempel på variabelanvändning för att tillhandahålla information om en bedräglig order.
Indata Utdata
Vår Shopify-butik har fått en order med stor risk för bedrägeri. Vi vill omedelbart annullera denna order innan den skickas till produktion:

{{ order.name }}
{{ order.billingAddress.lastName }}, {{ order.billingAddress.firstName }}
{{ order.email }}

Bekräfta den nya orderstatusen. Tack!
Vår Shopify-butik har fått en order med stor risk för bedrägeri. Vi vill omedelbart annullera denna order innan den skickas till produktion:

#1001
Dupont, Jeanne
jeanne@example.com

Bekräfta den nya orderstatusen. Tack!

Mata ut radartiklarna för en order med en för-loop

När en order tas emot kan det vara bra att skicka ett meddelande som innehåller de beställda produkterna. Du kan göra det genom att använda for loop, som kör ett kodblock upprepade gånger. Textfält som stöder variabler stöder även for loops och forloop-objekt.

Du vill till exempel skapa ett arbetsflöde som returnerar en lista över alla SKU:er och kvantiteter i en order. I avsnittet Meddelande i åtgärden Skicka internt e-postmeddelande använder du följande variabler.

Exempel på for loop-användning för att tillhandahålla orderinformation.
Indata Utdata
Ordersammanfattning:
{% for a in order.lineItems %}
SKU: {{a.sku}} ( {{a.quantity}} ),
{% endfor %}
Ordersammanfattning:
8987097979 (50)
8877778887 (3)
888998898B (1)

Mata ut radartiklarna för en order med en för-loop med ytterligare information

Du bestämmer dig för att lägga till mer information i e-postmeddelandet, inklusive produktnamn, SKU:er, pris per artikel och kundens leveransinformation. I avsnittet Meddelande i åtgärden Skicka internt e-postmeddelande använder du följande variabler.

Exempel på for loop-användning för att tillhandahålla mer omfattande orderinformation.
Indata Utdata
Ordersammanfattning:
{% for a in order.lineItems %}
Produkt: {{a.title}}
SKU: {{a.sku}}
Pris (per enhet): {{a.originalUnitPriceSet.shopMoney.amount}} USD
Kvantitet: {{a.quantity}}
{% endfor %}
Ordersammanfattning:
Produkt: Leggings med hög midja – svarta
SKU: 8987097979
Pris (per enhet): 8,49 USD
Kvantitet: 5
Produkt: Sportsockor – blå
SKU: 888999888B
Pris (per enhet): 5,61 USD
Kvantitet: 2

Mata ut några radobjekt genom att kombinera en för-loop med ett om-påstående

Du måste spåra sålda artiklar som tillhandahålls av en specifik säljare. I avsnittet Meddelande i åtgärden Skicka e-postmeddelande använder du följande variabler och inkluderar ett if-utdrag i din for loop.

Exempel på användning av for loop och if-utdrag för att tillhandahålla orderinformation för specifika säljare.
Indata Utdata
Såld Acme-produkt:
{% for x in order.lineItems %}
{% if x.vendor == 'acme-vendor' %}
Produktnamn: {{x.title}}
SKU: {{x.sku}}
{% endif %}
{% endfor %}
Såld Acme-produkt:
Produktnamn: Leggings med hög midja – svarta
SKU: 8987097979

Komplexa dataobjekt i Shopify Flow

Flow gör det möjligt för dig att komma åt nästan alla data som finns i GraphQL Admin API. Detta inkluderar komplexa dataobjekt, till exempel listor och objekt. Det finns dock vissa begränsningar för vad du kan göra med dessa objekt. Avsnittet beskriver dessa begränsningar och ger exempel på hur du kan arbeta med dem.

Istället för att anropa listor och objekt direkt bör du loopa över listan och bara inkludera de fält du vill ha.

Till exempel, istället för att anropa {{ order.lineItems }} direkt kan du använda följande format för att anropa specifika fält. Dessa exempel inkluderar alla fält som skulle ingå om listan eller objektet anropades direkt. Kopiera och klistra in de fält du behöver.

Är du redo att börja sälja med Shopify?

Prova gratis