ตัวแปร Liquid ใน Shopify Flow
ตัวแปรคือตัวยึดที่จะถูกแทนที่ด้วยค่าเมื่อเรียกใช้เวิร์กโฟลว์ ตัวแปรเหล่านี้อธิบายถึงลักษณะของลูกค้า การสั่งซื้อ และสินค้าที่เกี่ยวข้องกับขั้นตอนของคุณ ตัวอย่างเช่น มีตัวแปรต่างๆ เกี่ยวกับหมายเลขสั่งซื้อ ราคาในการสั่งซื้อ ชื่อลูกค้ า และอื่นๆ ตัวแปรสามารถใช้ได้ในเงื่อนไข เพื่อควบคุมตรรกะในเวิร์กโฟลว์ของคุณ หรือเพื่อแสดงข้อมูลในการดำเนินงาน
เกี่ยวกับ Liquid Liquid คือภาษาของเทมเพลตที่ใช้เพื่อเข้าถึงตัวแปรในการดำเนินงานและเขียนโค้ดใน Flow Flow ใช้ตัวเลือกสินค้าของ Liquid ที่ติดตาม ไลบรารีโอเพนซอร์ส มากที่สุด ธีมของ Shopify ใช้ตัวเลือกสินค้าของ Liquid อื่น แต่ตัวเลือกสินค้าของ Liquid นี้เจาะจงไปยังธีม และมีตัวกรองและแท็กมากกว่าการรองรับของ Flow รวมถึงโครงสร้างทางไวยากรณ์ที่แตกต่างกันไปในการเข้าถึงตัวแปร
ตัวแปร Liquid คุณสามารถเพิ่มตัวแปร Liquid ไปยังช่องข้อความที่มีลิงก์เพิ่มตัวแปร ได้ คลิกลิงก์เพิ่มตัวแปร ใต้ช่องที่เกี่ยวข้อง จากนั้นเลือกตัวแปรจากรายการ
ตัวแปรในรายการเพิ่มตัวแปร ได้รับการกรองแล้ว เพื่อให้คุณเห็นเฉพาะตัวแปรที่ส่งกลับตามขั้นตอนก่อนหน้าขั้นตอนปัจจุบัน เช่น ทริกเกอร์ ตัวอย่างเช่น ทริกเกอร์สร้างคำสั่งซื้อ จะให้แหล่งข้อมูลเกี่ยวกับเลขคำสั่งซื้อสั่งซื้อและร้านค้า ซึ่งจะช่วยให้คุณสามารถใช้ตัวแปรใดๆ ที่เกี่ยวข้องกับเลขคำสั่งซื้อหรือการตั้งค่าร้านค้าของคุณซึ่งสามารถเข้าถึงได้ใน API GraphQL Admin หลังจากที่คุณเลือกตัวแปรจากรายการ แล้วตัวแปรนั้นจะถูกจัดรูปแบบอย่างถูกต้องและเพิ่มไปยังกล่องข้อความให้คุณ
นอกจากนี้คุณยังสามารถเขียน liquid ได้โดยตรงในบล็อกข้อความ ตัวอย่างเช่น คุณสามารถใช้ตัวแปร {{ order.name }}
เพื่อแสดงสตริงคำสั่งซื้อที่แสดงในส่วนผู้ดูแล Shopify เช่น เลขคำสั่งซื้อ-123
เนื่องจาก Flow ใช้ GraphQL Admin API ในการกู้คืนข้อมูลที่คุณใช้ใน Liquid ดังนั้นโครงสร้างไวยากรณ์ตัวแปรจะใช้ "คาเมลเคส" ตัวอย่างเช่น หากต้องการเข้าถึงวันที่สร้างสินค้า ให้กรอก {{ product.createdAt }}
หากคุณใช้โครงสร้างไวยากรณ์ของ Liquid ในธีม Shopify คุณจะต้องกรอก {{ product.created_at }}
แท็กเงื่อนไขและการทำซ้ำ Liquid บางครั้งคุณอาจต้องการใช้แท็ก Liquid ในการดำเนินการต่อไปนี้:
เขียนคำสั่งกำหนดเงื่อนไข เช่น การกําหนดว่ายอดรวมของเลขคำสั่งซื้อต้องมากกว่า $100
ทำซ้ำคำสั่งผ่านรายการออบเจ็กต์ เช่น เอาต์พุตข้อมูลสำหรับสินค้าเฉพาะรายการแต่ละรายการในหนึ่งเลขคำสั่งซื้อ
คุณสามารถใช้ แท็ก Liquid ในการเขียนคำสั่งเหล่านี้และทำซ้ำคำสั่งผ่านรายการออบเจ็กต์ได้
ตัวอย่างเช่น Liquid ต่อไปนี้แสดงหมายเลขคำสั่งซื้อหากยอดรวมของเลขคำสั่งซื้อมากกว่า $100:
{% if order . totalPriceSet . shopMoney . amount > 100 %}
Order number: {{ order . name }}
{% endif %}
นอกจากนี้ คุณยังสามารถใช้ for loop เพื่อทำซ้ำคำสั่งผ่านรายการออบเจ็กต์ เช่น สินค้าเฉพาะรายการในเลขคำสั่งซื้อ ตัวอย่างเช่น Liquid ต่อไปนี้แสดงชื่อของสินค้าเฉพาะรายการแต่ละรายการในหนึ่งการสั่งซื้อ:
{% for li in order . lineItems %}
{{ li . title }}
{% endfor %}
Flow รองรับแท็กเงื่อนไข Liquid (หรือแท็กควบคุมขั้นตอนการทำงาน) ต่อไปนี้:
นอกจากนี้ Flow ยังรองรับแท็กการทำซ้ำของ Liquid ต่อไปนี้อีกด้วย:
ตัวกรอง ตัวกรองจะช่วยให้คุณสามารถแปลงข้อมูลใน Liquid ได้ Flow รองรับตัวกรอง Liquid แบบโอเพนซอร์สทั้งหมด
ตัวอย่างเช่น Liquid ต่อไปนี้จะลบอักษรนำหน้าออกจากชื่อและเอาต์พุตของเลขคำสั่งซื้อที่เหลืออยู่: {{ order.name | remove: "Order-" }}
นอกเหนือจากตัวกรอง Liquid มาตรฐานแล้ว Flow มีตัวกรองวันที่ที่สัมพันธ์กับวันที่อื่นเพื่อรองรับทริกเกอร์ เวลาที่กำหนดไว้ และ รับฟีเจอร์ข้อมูล ตัวกรองเหล่านี้คือ: date_minus
และ date_plus
หากต้องการส่งคืนสินค้าในวันที่หนึ่งวันในอนาคตนับจากนี้:{{ "now" | date_plus: "1 day" }}
หากต้องการส่งคืนสินค้าในวันที่หนึ่งวันที่ผ่านมา:{{ "now" | date_minus: "1 day" }}
ตั วกรองเหล่านี้ยอมรับ second
, minute
, day
, week
, month
และ year
เป็นหน่วยระยะเวลา ทั้งในรูปเอกพจน์ (เช่น second
) และพหูพจน์ (เช่น seconds
) นอกเหนือจากรูปแบบนี้ คุณยังสามารถใส่จํานวนเต็ม (จํานวนวินาที) ตัวอย่างเช่น:{{ "now" | date_minus: 3600 }}
นอกจากนี้ คุณยังสามารถจัดหาสตริงระยะเวลา ISO8601 ระบุ P1Y2D
หมายถึง 1 ปี 2 วัน:{{ "now" | date_minus: "P1Y2D" }}
ข้อควรพิจารณาเกี่ยวกับการใช้ตัวแปร Liquid ในตัวกรอง
Flow ไม่รองรับจุดที่มีให้ใช้งานในบางตัวกรอง ตัวอย่างเช่น Flow รองรับ {{ order.lineItems | size }}
แต่ไม่รองรับ {{ order.lineItems.size }}
Flow ไม่รองรับเครื่องหมายจุดของเมตาฟิลด์ ตัวอย่างเช่น คุณไม่สามารถใช้ {{ order.metafields.custom.hold_note }}
แต่คุณต้องลูปรอบเมตาฟิลด์ตามที่ระบุไว้ในตัวอย่าง
Flow ไม่รองรับการใช้ดัชนีเพื่อเข้าถึงรายการสินค้าในรายการ ตัวอย่างเช่น คุณไม่ส ามารถใช้ {{ order.lineItems[0].title }}
ได้ แต่คุณต้องลูปรอบสินค้าเฉพาะรายการตามที่ระบุไว้ในตัวอย่าง
ตัวอย่าง เพื่อให้เข้าใจวิธีใช้ตัวแปร Liquid ได้ดีขึ้น ลองพิจารณาตัวอย่างต่อไปนี้
URL เอาต์พุตของแหล่งข้อมูล คุณต้องการแสดง URL เอาต์พุตให้กับลูกค้า คำสั่งซื้อ และสินค้าที่เกี่ยวข้องกับขั้นตอนการทำงาน
หมายเหตุ
ไวยากรณ์ที่ตรงกันของ URL ขึ้นอยู่กับทริกเกอร์ ตัวอย่างเช่น ทริกเกอร์คำสั่งซื้อไม่อนุญาตให้คุณเข้าถึง ID สินค้า เช่น {{ product.legacyResourceId }}
# Output the base Admin URL for your store
https://admin.shopify.com/store/{{ shop . myShopifyDomain | replace : ".myshopify.com" , "" }}
# Assign the base Admin url to a variable named base_url:
{%- capture base_url -%} https://admin.shopify.com/store/{{ shop . myShopifyDomain | replace : ".myshopify.com" , "" }}{%- endcapture -%}
# Customer from a Customer trigger:
{{ base_url }} /customers/{{ customer . legacyResourceId }}
# Customer without the base_url:
https://admin.shopify.com/store/{{ shop . myShopifyDomain | replace : ".myshopify.com" , "" }} /customers/{{ customer . legacyResourceId }}
# Customer from an Order trigger:
{{ base_url }} /customers/{{ order . customer . legacyResourceId }}
# Order:
{{ base_url }} /orders/{{ order . legacyResourceId }}
# Product:
{{ base_url }} /products/{{ product . legacyResourceId }}
# Product Variant:
{{ base_url }} /products/{{ product . legacyResourceId }} /variants/{{ productVariant . legacyResourceId }}
# Example showing a clickable link in HTML, making use of the URL:
<a href="{{ base_url }} /products/{{ product . legacyResourceId }} ">{{ product . title }} </a>
คุณต้องการแปลงชุดแท็กเป็นเมตาฟิลด์ที่เป็นรายการช่องข้อความบรรทัดเดียว คุณสร้างขั้นตอนการทำงานโดยใช้ทริกเกอร์สินค้าที่เพิ่มไปยังร้านค้า และใช้การดำเนินการอัปเดตเมตาฟิลด์สินค้า ในส่วนค่า ของการดำเนินการอัปเดตเมตาฟิลด์สินค้า ให้เพิ่มโค้ด Liquid ต่อไปนี้ ตัวอย่างนี้อนุมานว่าคุณต้องการตั้งค่าเพียงครั้งเดียวเมื่อสร้างสินค้า และสินค้ามีแท็กสองแท็กที่เกี่ยวข้องกัน: color:red
และ color:orange
Liquid ตัวอย่างเพื่อตั้งรายการของช่องข้อความบรรทัดเดียว อินพุต เอาท์พุต
{% 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: ","}}]
["สีแดง","สีส้ม"]
เขียนข้อความอีเมลแบบไดนามิกสำหรับคำสั่งซื้อ ตัวอย่างเช่น คุณต้องการสร้างขั้นตอนการทำงานที่จะส่งอีเมลไปยังพนักงานเมื่อลูกค้าใช้จ่ายมากกว่า $500 ในคำสั่งซื้อเดียว คุณต้องสร้างขั้นตอนการทำงานที่ใช้ทริกเกอร์สร้างคำสั่งซื้อแล้ว ขึ้น ตั้งเงื่อนไขที่จะเป็นจริงหากยอดรวมของคำสั่งซื้อเกินกว่า $500 และใช้การดำเนินการส่งอีเมลภายใน ในส่วนข้อความ ของการดำเนินการส่งอีเมลภายใน นั้น คุณต้องใช้ตัวแปรต่อไปนี้
ตัวอย่างของตัวแปรที่ใช้เพื่อให้รายละเอียดลูกค้า อินพุต เอาท์พุต โปรดส่งบันทึกขอบคุณส่วนบุคคลไปยัง {{ order.customer.firstName }} {{ order.customer.lastName }}({{ order.customer.email }}) สำหรับการสั่งซื้อราคา $ {{ order.totalPriceSet.shopMoney.amount }} โปรดส่งบันทึกขอบคุณส่วนตัวไปยัง Jeanne Dupont (jeanne@example.com) ในการสั่งซื้อสินค้าราคา $763.42
เขียนข้อความอีเมลแบบไดนามิกสำหรับสินค้าที่สต็อกสินค้าเหลือน้อย คุณตัดสินใจว่าคุณต้องแจ้งให้พนักงานทราบเมื่อสินค้าคงคลังเหลือน้อยและต้องมีการสั่งซื้อเข้าสต็อกเพิ่ม คุณต้องสร้างขั้นตอนการทำงานที่เริ่มต้นด้วยทริกเกอร์เปลี่ยนปริมาณสินค้าคงคลังแล้ว และตั้งเงื่อนไขที่จะเป็นจริงหากปริมาณสินค้าคงคลังก่อนหน้าน้อยกว่าหรือเท่ากับ 10 ในส่วนข้อความ ของการดำเนินการส่งอีเมลภายใน นั้น คุณต้องใช้ตัวแปรต่อไปนี้
ตัวอย่างการใช้ตัวแปรเพื่อให้รายละเอียดรายการสินค้า อินพุต เอาท์พุต โปรดสั่งซื้อ{{ product.title }}อีกครั้ง ส่งอีเมลไปยัง owner@store.com เพื่อตรวจสอบยืนยันว่าพวกเขาได้รับคำสั่งซื้อแล้ว โปรดสั่งซื้อกางเกงเลกกิ้งเอวสูง - สีดำซ้ำอีกครั้ง ส่งอีเมลไปยัง owner@example.com เพื่อตรวจสอบยืนยันว่าพวกเขาได้รับคำสั่งซื้อแล้ว
เขียนข้อความอีเมลแบบไดนามิกเพื่อแจ้งให้พนักงานทราบเกี่ยวกับคำสั่งซื้อจากการฉ้อโกงด้านการชำระเงิน คุณต้องการยกเลิกคำสั่งซื้อที่มีระดับความเสี่ยงสูง แต่ต้องการให้พนักงานของคุณยกเลิกคำสั่งซื้อด้วยตนเอง คุณต้องสร้างขั้นตอนการทำงานที่เริ่มต้นด้วยทริกเกอร์สร้างคำสั่งซื้อแล้ว และตั้งเงื่อนไขที่จะเป็นจริงหากคำสั่งซื้อมีระดับความเสี่ยงเท่ากับสูง ในส่วนข้อความ ของการดำเนินการส่งอีเมลภายใน นั้น คุณต้องใช้ตัวแปรต่อไปนี้
ตัวอย่างของตัวแปรที่ใช้เพื่อให้ข้อมูลเกี่ยวกับคำสั่งซื้อจากการฉ้อโกงด้านการชำระเงิน อินพุต เอาท์พุต ร้านค้า Shopify ของเราได้รับคำสั่งซื้อที่มีความเสี่ยงที่จะเป็นการทุจริตสูง เราต้องการยกเลิกสินค้าตามคำสั่งซื้อนี้ทันที ก่อนที่จะมีการส่งไปยังส่วนการผลิต: {{ order.name }} {{ order.billingAddress.lastName }}, {{ order.billingAddress.firstName }} {{ order.email }} โปรดยืนยันสถานะคำสั่งซื้อใหม่ ขอขอบคุณ ร้านค้า Shopify ของเราได้รับคำสั่งซื้อที่มีความเสี่ยงที่จะเป็นการทุจริตสูง เราต้องการยกเลิกสินค้าตามคำสั่งซื้อนี้ทันที ก่อนที่จะมีการส่งไปยังส่วนการผลิต: #1001 Dupont, Jeanne jeanne@example.com โปรดยืนยันสถานะคำสั่งซื้อใหม่ ขอขอบคุณ
แสดงผลสินค้าเฉพาะรายการสำหรับคำสั่งซื้อที่ใช้ For Loop เมื่อได้รับคำสั่งซื้อมาแล้ว การส่งข้อความระบุสินค้าที่ลูกค้าสั่งซื้อก็อาจเป็นประโยชน์ได้ คุณสามารถทำเช่นนี้ได้โดยใช้ for loop
ซึ่งจะเ ป็นการสั่งให้ระบบดำเนินการตามบล็อกโค้ดซ้ำๆ นอกจากนี้ ช่องข้อความที่รองรับตัวแปรจะยังรองรับ for loop และอ็อบเจกต์ forloop ด้วย
ตัวอย่างเช่น คุณต้องการสร้างขั้นตอนการทำงานที่จะส่งคืนรายการของ SKU และปริมาณทั้งหมดในคำสั่งซื้อหนึ่ง ในส่วนข้อความ ของการดำเนินการส่งอีเมลภายใน นั้น คุณต้องใช้ตัวแปรต่อไปนี้
ตัวอย่างของ For Loop ที่ใช้เพื่อให้ข้อมูลคำสั่งซื้อ อินพุต เอาท์พุต ข้อมูลสรุปการสั่งซื้อ: {% for a in order.lineItems %} SKU: {{a.sku}} ( {{a.quantity}} ), {% endfor %} ข้อมูลสรุปคำสั่งซื้อ: 8987097979 (50) 8877778887 (3) 888998898B (1)
แสดงผลสินค้าเฉพาะรายการสำหรับคำสั่งซื้อที่ใช้ For Loop พร้อมด้วยข้อมูลเพิ่มเติม คุณตัดสินใจเพิ่มข้อมูลเพิ่มเติมไปยังอีเมล ได้ แก่ ชื่อสินค้า, SKU, ราคาต่อรายการ และข้อมูลการจัดส่งของลูกค้า ในส่วนข้อความ ของการดำเนินการส่งอีเมลภายใน นั้น คุณต้องใช้ตัวแปรต่อไปนี้
ตัวอย่างของ For Loop ที่ใช้เพื่อให้ข้อมูลคำสั่งซื้อแบบครอบคลุม อินพุต เอาท์พุต ข้อมูลสรุปการสั่งซื้อ: {% for a in order.lineItems %} สินค้า: {{a.title}} SKU: {{a.sku}} ราคา (ต่อหน่วย): $ {{a.originalUnitPriceSet.shopMoney.amount}} ปริมาณ: {{a.quantity}} {% endfor %} ข้อมูลสรุปการสั่งซื้อ: สินค้า: กางเกงเลกกิ้ง - สีดำ SKU: 8987097979 ราคา (ต่อหน่วย): $8.49 ปริมาณ: 5 สินค้า: ถุงเท้ากีฬา - สีฟ้า SKU: 888998898B ราคา (ต่อหน่วย): $5.61 ปริมาณ: 2
แสดงผลสินค้าเฉพาะรายการบางรายการโดยการรวม For Loop ที่มีรูปประโยค “ถ้า” คุณต้องติดตามรายการสินค้าที่ขายได้ซึ่งเวนเดอร์รายใดรายหนึ่งจัดเตรียมให้ ในส่วนข้อความ ของการดำเนินการส่งอีเมลภายใน คุณต้องใช้ตัวแปรดังต่อไปนี้และใส่ข้อความ if
ใน for loop
ของคุณ
ตัวอย่างของ for loop และข้อความ if ที่ใช้เพื่อให้ข้อมูลคำสั่งซื้อกับเวนเดอร์รายใดรายหนึ่ง อินพุต เอาท์พุต สินค้าที่ขายได้ของ Acme: {% for x in order.lineItems %} {% if x.vendor == 'acme-vendor' %} ชื่อสินค้า: {{x.title}} SKU: {{x.sku}} {% endif %} {% endfor %} สินค้าที่ขายได้ของ Acme: ชื่อสินค้า: กางเกงเลกกิ้ง - สีดำ SKU: 8987097979
อ็อบเจกต์ข้อมูลที่ซับซ้อนใน Shopify Flow Flow ช่วยให้คุณเข้าถึงข้อมูลเกือบทั้งหมดภายใน API ผู้ดูแลระบบ GraphQL ซึ่งรวมถึงออบเจ็กต์ข้อมูลที่ซับซ้อน เช่น รายการและออบเจ็กต์ อย่างไรก็ตาม มีข้อจํากัดบางประการที่คุณสามารถดำเนินการกับออบเจ็กต์เหล่านี้ได้ ส่วนนี้จะสรุปข้อจํากัดเหล่านี้และแสดงตัวอย่างวิธีการร่วมงานกับพวกเขา
ข้อควรระวัง
คุณไม่สามารถแสดงรายการ/อาร์เรย์หรือออบเจ็กต์ใน Liquid ได้โดยการเรียกใช้รายการหรือออบเจ็กต์โดยตรง เช่น การกรอก {{ order.lineItems }}
ขีดจํากัดนี้จะใส่ไว้ในที่เนื่องจาก GraphQL สามารถส่งคืนข้อมูลจำนวนมากเกินไป ซึ่งจะทำให้เวิร์กโฟลว์ของคุณล้มเหลว นอกจากนี้ เมื่อมีฟิลด์ข้อมูลใหม่เข้ามา อาจทำให้บางขั้นตอนการทำงานของคุณมีปัญหา
แทนที่จะเรียกใช้รายการและออบเจ็กต์โดยตรง คุณควรลูปรอบรายการและใส่เฉพาะช่องที่คุณต้องการ
ตัวอย่างเช่น แทนที่จะโทร{{ order.lineItems }}
โดยตรง ให้ใช้รูปแบบต่อไปนี้เพื่อเรียกช่องข้อมูลเฉพาะ ตัวอย่างเหล่านี้รวมช่องทั้งหมดที่จะรวมอยู่ด้วยจากการเรียกอาร์เรย์หรืออ็อบเจกต์โดยตรง คัดลอกและวางช่องที่คุณต้องการ
Text
{% for li in order . lineItems %}
{% comment %} li.contract - omitted {% endcomment %}
{% for ca in li . customAttributes %}
{{ ca . key }}
{{ ca . value }}
{% endfor %}
{% for da in li . discountAllocations %}
{{ da . allocatedAmountSet . presentmentMoney . amount }}
{{ da . allocatedAmountSet . presentmentMoney . currencyCode }}
{{ da . allocatedAmountSet . shopMoney . amount }}
{{ da . allocatedAmountSet . shopMoney . currencyCode }}
{% endfor %}
{{ li . discountedTotalSet . presentmentMoney . amount }}
{{ li . discountedTotalSet . presentmentMoney . currencyCode }}
{{ li . discountedTotalSet . shopMoney . amount }}
{{ li . discountedTotalSet . shopMoney . currencyCode }}
{{ li . discountedUnitPriceSet . presentmentMoney . amount }}
{{ li . discountedUnitPriceSet . presentmentMoney . currencyCode }}
{{ li . discountedUnitPriceSet . shopMoney . amount }}
{{ li . discountedUnitPriceSet . shopMoney . currencyCode }}
{% comment %} li.duties - omitted {% endcomment %}
{{ li . fulfillableQuantity }}
{{ li . fulfillmentService . callbackUrl }}
{{ li . fulfillmentService . fulfillmentOrdersOptIn }}
{{ li . fulfillmentService . handle }}
{{ li . fulfillmentService . id }}
{{ li . fulfillmentService . inventoryManagement }}
{% comment %} rest of location omitted {% endcomment %}
{{ li . fulfillmentService . location . name }}
{{ li . fulfillmentService . productBased }}
{{ li . fulfillmentService . serviceName }}
{% for sm in li . fulfillmentService . shippingMethods %}
{{ sm . code }}
{{ sm . label }}
{% endfor %}
{{ li . fulfillmentService . type }}
{{ li . fulfillmentStatus }}
{{ li . id }}
{{ li . image . altText }}
{{ li . image . height }}
{{ li . image . id }}
{% comment %} li.image.metafield omitted {% endcomment %}
{% comment %} li.image.privateMetafield omitted {% endcomment %}
{{ li . image . width }}
{{ li . merchantEditable }}
{{ li . name }}
{{ li . nonFulfillableQuantity }}
{{ li . originalTotalSet . presentmentMoney . amount }}
{{ li . originalTotalSet . presentmentMoney . currencyCode }}
{{ li . originalTotalSet . shopMoney . amount }}
{{ li . originalTotalSet . shopMoney . currencyCode }}
{{ li . originalUnitPriceSet . presentmentMoney . amount }}
{{ li . originalUnitPriceSet . presentmentMoney . currencyCode }}
{{ li . originalUnitPriceSet . shopMoney . amount }}
{{ li . originalUnitPriceSet . shopMoney . currencyCode }}
{% comment %} rest of product omitted {% endcomment %}
{{ li . product . title }}
{{ li . quantity }}
{{ li . refundableQuantity }}
{{ li . requiresShipping }}
{{ li . restockable }}
{{ li . sellingPlan . name }}
{{ li . sku }}
{% for tl in li . taxLines %}
{{ tl . priceSet . presentmentMoney . amount | json }}
{{ tl . priceSet . presentmentMoney . currencyCode | json }}
{{ tl . priceSet . shopMoney . amount | json }}
{{ tl . priceSet . shopMoney . currencyCode | json }}
{{ tl . rate | json }}
{{ tl . ratePercentage | json }}
{{ tl . title | json }}
{% endfor %}
{{ li . taxable }}
{{ li . title }}
{{ li . totalDiscountSet . presentmentMoney . amount }}
{{ li . totalDiscountSet . presentmentMoney . currencyCode }}
{{ li . totalDiscountSet . shopMoney . amount }}
{{ li . totalDiscountSet . shopMoney . currencyCode }}
{{ li . unfulfilledDiscountedTotalSet . presentmentMoney . amount }}
{{ li . unfulfilledDiscountedTotalSet . presentmentMoney . currencyCode }}
{{ li . unfulfilledDiscountedTotalSet . shopMoney . amount }}
{{ li . unfulfilledDiscountedTotalSet . shopMoney . currencyCode }}
{{ li . unfulfilledOriginalTotalSet . presentmentMoney . amount }}
{{ li . unfulfilledOriginalTotalSet . presentmentMoney . currencyCode }}
{{ li . unfulfilledOriginalTotalSet . shopMoney . amount }}
{{ li . unfulfilledOriginalTotalSet . shopMoney . currencyCode }}
{{ li . unfulfilledQuantity }}
{% comment %} rest of variant omitted {% endcomment %}
{{ li . variant . title }}
{{ li . variantTitle }}
{{ li . vendor }}
{% endfor %}
json
{
"lineItems": [
{% for li in order . lineItems %}
{% if forloop.first != true %} ,{% endif %}
{
"contract": {
{% comment %} rest of contract omitted {% endcomment %}
"id": {{ li . contract . id | json }}
},
"customAttributes": [
{% for ca in li . customAttributes %}
{% if forloop.first != true %} ,{% endif %}
{
"key":{{ ca . key | json }} ,
"value":{{ ca . value | json }}
}
{% endfor %}
],
"discountAllocations": [
{% for da in li . discountAllocations %}
{% if forloop.first != true %} ,{% endif %}
"allocatedAmountSet": {
"presentmentMoney" : {
"amount": {{ da . allocatedAmountSet . presentmentMoney . amount | json }} ,
"currencyCode": {{ da . allocatedAmountSet . presentmentMoney . currencyCode | json }}
},
"shopMoney": {
"amount": {{ da . allocatedAmountSet . shopMoney . amount | json }} ,
"currencyCode": {{ da . allocatedAmountSet . shopMoney . currencyCode | json }}
}
}
{% endfor %}
],
"discountedTotalSet": {
"presentmentMoney" : {
"amount": {{ li . discountedTotalSet . presentmentMoney . amount | json }} ,
"currencyCode": {{ li . discountedTotalSet . presentmentMoney . currencyCode | json }}
},
"shopMoney": {
"amount": {{ li . discountedTotalSet . shopMoney . amount | json }} ,
"currencyCode": {{ li . discountedTotalSet . shopMoney . currencyCode | json }}
}
},
"discountedUnitPriceSet": {
"presentmentMoney" : {
"amount": {{ li . discountedUnitPriceSet . presentmentMoney . amount | json }} ,
"currencyCode": {{ li . discountedUnitPriceSet . presentmentMoney . currencyCode | json }}
},
"shopMoney": {
"amount": {{ li . discountedUnitPriceSet . shopMoney . amount | json }} ,
"currencyCode": {{ li . discountedUnitPriceSet . shopMoney . currencyCode | json }}
}
},
"duties": [
{% for duty li . duties %}
{% if forloop.first != true %} ,{% endif %}
{
{% comment %} rest of duties omitted {% endcomment %}
"id": {{ duty . id | json }}
}
{% endfor %}
],
"fulfillableQuantity": {{ li . fulfillableQuantity | json }} ,
"fulfillmentService": {
"callbackUrl":{{ li . fulfillmentService . callbackUrl | json }} ,
"fulfillmentOrdersOptIn": {{ li . fulfillmentService . fulfillmentOrdersOptIn | json }} ,
"handle": {{ li . fulfillmentService . handle | json }} ,
"id": {{ li . fulfillmentService . id | json }} ,
"inventoryManagement": {{ li . fulfillmentService . inventoryManagement | json }} ,
{% comment %} fulfillmentService.inventoryManagement - omitted {% endcomment %}
"productBased": {{ li . fulfillmentService . productBased | json }} ,
"serviceName": {{ li . fulfillmentService . serviceName | json }} ,
"shippingMethods": [
{% for sm in li . fulfillmentService . shippingMethods %}
{% if forloop.first != true %} ,{% endif %}
{
"code": {{ sm . code | json }} ,
"label": {{ sm . label | json }}
}
{% endfor %}
],
"type": {{ li . fulfillmentService . type | json }}
},
"fulfillmentStatus": {{ li . fulfillmentStatus | json }} ,
"id": {{ li . id | json }} ,
"image": {
"altText": {{ li . image . altText | json }} ,
"height": {{ li . image . height | json }} ,
"id": {{ li . image . id | json }} ,
{% comment %} li.image.metafield omitted {% endcomment %}
{% comment %} li.image.privateMetafield omitted {% endcomment %}
"width":{{ li . image . width | json }}
},
"merchantEditable": {{ li . merchantEditable | json }} ,
"name": {{ li . name | json }} ,
"nonFulfillableQuantity": {{ li . nonFulfillableQuantity | json }} ,
"originalTotalSet": {
"presentmentMoney" : {
"amount": {{ li . originalTotalSet . presentmentMoney . amount | json }} ,
"currencyCode": {{ li . originalTotalSet . presentmentMoney . currencyCode | json }}
},
"shopMoney": {
"amount": {{ li . originalTotalSet . shopMoney . amount | json }} ,
"currencyCode": {{ li . originalTotalSet . shopMoney . currencyCode | json }}
}
},
"originalUnitPriceSet": {
"presentmentMoney" : {
"amount": {{ li . originalUnitPriceSet . presentmentMoney . amount | json }} ,
"currencyCode": {{ li . originalUnitPriceSet . presentmentMoney . currencyCode | json }}
},
"shopMoney": {
"amount": {{ li . originalUnitPriceSet . shopMoney . amount | json }} ,
"currencyCode": {{ li . originalUnitPriceSet . shopMoney . currencyCode | json }}
}
},
"product": {
{% comment %} rest of Product omitted {% endcomment %}
"title": {{ li . product . title | json }}
},
"quantity": {{ li . quantity | json }} ,
"refundableQuantity": {{ li . refundableQuantity | json }} ,
"requiresShipping": {{ li . requiresShipping | json }} ,
"restockable": {{ li . restockable | json }} ,
"sellingPlan": {
"name": {{ li . sellingPlan . name | json }}
},
"sku": {{ li . sku | json }} ,
"taxLines": [
{% for tl in li . taxLines %}
{% if forloop.first != true %} ,{% endif %}
{
"priceSet": {
"presentmentMoney" : {
"amount": {{ tl . priceSet . presentmentMoney . amount | json }} ,
"currencyCode": {{ tl . priceSet . presentmentMoney . currencyCode | json }}
},
"shopMoney": {
"amount": {{ tl . priceSet . shopMoney . amount | json }} ,
"currencyCode": {{ tl . priceSet . shopMoney . currencyCode | json }}
}
},
"rate": {{ tl . rate | json }} ,
"ratePercentage": {{ tl . ratePercentage | json }} ,
"title": {{ tl . title | json }}
}
{% endfor %}
],
"taxable":{{ li . taxable | json }} ,
"title":{{ li . title | json }} ,
"totalDiscountSet": {
"presentmentMoney" : {
"amount": {{ li . totalDiscountSet . presentmentMoney . amount | json }} ,
"currencyCode": {{ li . totalDiscountSet . presentmentMoney . currencyCode | json }}
},
"shopMoney": {
"amount": {{ li . totalDiscountSet . shopMoney . amount | json }} ,
"currencyCode": {{ li . totalDiscountSet . shopMoney . currencyCode | json }}
}
},
"unfulfilledDiscountedTotalSet": {
"presentmentMoney" : {
"amount": {{ li . unfulfilledDiscountedTotalSet . presentmentMoney . amount | json }} ,
"currencyCode": {{ li . unfulfilledDiscountedTotalSet . presentmentMoney . currencyCode | json }}
},
"shopMoney": {
"amount": {{ li . unfulfilledDiscountedTotalSet . shopMoney . amount | json }} ,
"currencyCode": {{ li . unfulfilledDiscountedTotalSet . shopMoney . currencyCode | json }}
}
},
"unfulfilledOriginalTotalSet": {
"presentmentMoney" : {
"amount": {{ li . unfulfilledOriginalTotalSet . presentmentMoney . amount | json }} ,
"currencyCode": {{ li . unfulfilledOriginalTotalSet . presentmentMoney . currencyCode | json }}
},
"shopMoney": {
"amount": {{ li . unfulfilledOriginalTotalSet . shopMoney . amount | json }} ,
"currencyCode": {{ li . unfulfilledOriginalTotalSet . shopMoney . currencyCode | json }}
}
},
"unfulfilledQuantity": {{ li . unfulfilledQuantity | json }} ,
"variant": {
{% comment %} rest of variant omitted {% endcomment %}
"title": {{ li . variant . title | json }}
},
"variantTitle": {{ li . variantTitle | json }} ,
"vendor": {{ li . vendor | json }}
}
{% endfor %}
]
}