ตัวแปรใน Shopify Flow

ตัวแปรคือตัวยึดตำแหน่งที่กำหนดไว้ใน Liquid ที่จะถูกแทนที่ด้วยค่าที่ได้จาก GraphQL Admin API เมื่อเรียกใช้ขั้นตอนการทำงาน ตัวแปรสามารถอธิบายคุณลักษณะของลูกค้า คำสั่งซื้อ และสินค้าที่เกี่ยวข้องกับขั้นตอนการทำงานของคุณ เช่น หมายเลขคำสั่งซื้อ ราคาสินค้า หรือชื่อลูกค้า สามารถใช้ตัวแปรได้ในเงื่อนไขเพื่อควบคุมตรรกะในขั้นตอนการทำงาน หรือเพื่อแสดงข้อมูลจากการดำเนินการ

เพิ่มตัวแปร

คุณสามารถเพิ่มตัวแปรโดยใช้ Liquid ไปยังช่องข้อความที่มีลิงก์เพิ่มตัวแปรได้ คลิกลิงก์เพิ่มตัวแปรใต้ช่องที่เกี่ยวข้อง จากนั้นเลือกตัวแปรจากรายการ

รูปภาพที่แสดงฟิลด์ที่ยอมรับ Liquid

ตัวแปรในรายการ เพิ่มตัวแปร จะถูกกรองเพื่อให้คุณใช้เฉพาะตัวแปรที่ส่งคืนมาโดยขั้นตอนก่อนหน้าของขั้นตอนปัจจุบัน เช่น ทริกเกอร์ ตัวอย่างเช่น ทริกเกอร์ "Order Created" จะให้แหล่งข้อมูลคำสั่งซื้อและร้านค้าจาก Admin API ที่สามารถแทรกไว้เป็นตัวแปรได้ หลังจากที่คุณเลือกตัวแปรจากรายการแล้ว ตัวแปรดังกล่าวจะถูกเพิ่มลงในกล่องข้อความตามรูปแบบที่ถูกต้องใน Liquid

นอกจากนี้คุณยังสามารถเขียน Liquid ได้โดยตรงในบล็อกข้อความ ตัวอย่างเช่น คุณสามารถใช้ตัวแปร {{ order.name }} เพื่อแสดงสตริงคำสั่งซื้อที่แสดงในส่วนผู้ดูแล Shopify เช่น คำสั่งซื้อ-123

เนื่องจาก Flow ใช้ 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 เอาต์พุตให้กับลูกค้า คำสั่งซื้อ และสินค้าที่เกี่ยวข้องกับขั้นตอนการทำงาน

# 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 ซึ่งรวมถึงออบเจ็กต์ข้อมูลที่ซับซ้อน เช่น รายการและออบเจ็กต์ อย่างไรก็ตาม มีข้อจํากัดบางประการที่คุณสามารถดำเนินการกับออบเจ็กต์เหล่านี้ได้ ส่วนนี้จะสรุปข้อจํากัดเหล่านี้และแสดงตัวอย่างวิธีการร่วมงานกับพวกเขา

แทนที่จะเรียกใช้รายการและออบเจ็กต์โดยตรง คุณควรลูปรอบรายการและใส่เฉพาะช่องที่คุณต้องการ

ตัวอย่างเช่น แทนที่จะโทร{{ 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 %}
            ],
&#x22;discountAllocations&#x22;: [
            {% for da in li.discountAllocations %}
                {% if forloop.first != true %},{% endif %}
                &#x22;allocatedAmountSet&#x22;: {
                    &#x22;presentmentMoney&#x22; : {
                        &#x22;amount&#x22;: {{ da.allocatedAmountSet.presentmentMoney.amount | json }},
                        &#x22;currencyCode&#x22;: {{ da.allocatedAmountSet.presentmentMoney.currencyCode | json }}
                    },
                    &#x22;shopMoney&#x22;: {
                        &#x22;amount&#x22;: {{ da.allocatedAmountSet.shopMoney.amount | json }},
                        &#x22;currencyCode&#x22;: {{ da.allocatedAmountSet.shopMoney.currencyCode | json }}
                    }
                }
            {% endfor %}
        ],

        &#x22;discountedTotalSet&#x22;: {
            &#x22;presentmentMoney&#x22; : {
                &#x22;amount&#x22;: {{ li.discountedTotalSet.presentmentMoney.amount | json }},
                &#x22;currencyCode&#x22;: {{ li.discountedTotalSet.presentmentMoney.currencyCode | json }}
            },
            &#x22;shopMoney&#x22;: {
                &#x22;amount&#x22;: {{ li.discountedTotalSet.shopMoney.amount | json }},
                &#x22;currencyCode&#x22;: {{ li.discountedTotalSet.shopMoney.currencyCode | json }}
            }
        },

        &#x22;discountedUnitPriceSet&#x22;: {
            &#x22;presentmentMoney&#x22; : {
                &#x22;amount&#x22;: {{ li.discountedUnitPriceSet.presentmentMoney.amount | json }},
                &#x22;currencyCode&#x22;: {{ li.discountedUnitPriceSet.presentmentMoney.currencyCode | json }}
            },
            &#x22;shopMoney&#x22;: {
                &#x22;amount&#x22;: {{ li.discountedUnitPriceSet.shopMoney.amount | json }},
                &#x22;currencyCode&#x22;: {{ li.discountedUnitPriceSet.shopMoney.currencyCode | json }}
            }
        },
        &#x22;duties&#x22;: [
            {% for duty li.duties %}
            {% if forloop.first != true %},{% endif %}
            {
                {% comment %}rest of duties omitted{% endcomment %}
                &#x22;id&#x22;: {{ duty.id | json }}
            }
            {% endfor %}
        ],
        &#x22;fulfillableQuantity&#x22;: {{ li.fulfillableQuantity | json }},

        &#x22;fulfillmentService&#x22;: {
            &#x22;callbackUrl&#x22;:{{ li.fulfillmentService.callbackUrl | json }},
            &#x22;fulfillmentOrdersOptIn&#x22;: {{ li.fulfillmentService.fulfillmentOrdersOptIn | json }},
            &#x22;handle&#x22;: {{ li.fulfillmentService.handle | json }},
            &#x22;id&#x22;: {{ li.fulfillmentService.id | json }},
            &#x22;inventoryManagement&#x22;: {{ li.fulfillmentService.inventoryManagement | json }},
            {% comment %}fulfillmentService.inventoryManagement - omitted {% endcomment %}
            &#x22;productBased&#x22;: {{ li.fulfillmentService.productBased | json }},
            &#x22;serviceName&#x22;: {{ li.fulfillmentService.serviceName | json }},
            &#x22;shippingMethods&#x22;: [
                {% for sm in li.fulfillmentService.shippingMethods %}
                    {% if forloop.first != true %},{% endif %}
                    {
                        &#x22;code&#x22;: {{ sm.code | json }},
                        &#x22;label&#x22;: {{ sm.label | json }}
                    }
                {% endfor %}
            ],
            &#x22;type&#x22;: {{ li.fulfillmentService.type | json }}

        },
        &#x22;fulfillmentStatus&#x22;: {{ li.fulfillmentStatus | json }},
        &#x22;id&#x22;: {{ li.id | json }},
        &#x22;image&#x22;: {
            &#x22;altText&#x22;: {{ li.image.altText | json }},
            &#x22;height&#x22;: {{ li.image.height | json }},
            &#x22;id&#x22;: {{ li.image.id | json }},
            {% comment %}li.image.metafield omitted{% endcomment %}
            {% comment %}li.image.privateMetafield omitted{% endcomment %}
            &#x22;width&#x22;:{{ li.image.width | json }}
        },
        &#x22;merchantEditable&#x22;: {{ li.merchantEditable | json }},
        &#x22;name&#x22;: {{ li.name | json }},
        &#x22;nonFulfillableQuantity&#x22;: {{ li.nonFulfillableQuantity | json }},

        &#x22;originalTotalSet&#x22;: {
            &#x22;presentmentMoney&#x22; : {
                &#x22;amount&#x22;: {{ li.originalTotalSet.presentmentMoney.amount | json }},
                &#x22;currencyCode&#x22;: {{ li.originalTotalSet.presentmentMoney.currencyCode | json }}
            },
            &#x22;shopMoney&#x22;: {
                &#x22;amount&#x22;: {{ li.originalTotalSet.shopMoney.amount | json }},
                &#x22;currencyCode&#x22;: {{ li.originalTotalSet.shopMoney.currencyCode | json }}
            }
        },

        &#x22;originalUnitPriceSet&#x22;: {
            &#x22;presentmentMoney&#x22; : {
                &#x22;amount&#x22;: {{ li.originalUnitPriceSet.presentmentMoney.amount | json }},
                &#x22;currencyCode&#x22;: {{ li.originalUnitPriceSet.presentmentMoney.currencyCode | json }}
            },
            &#x22;shopMoney&#x22;: {
                &#x22;amount&#x22;: {{ li.originalUnitPriceSet.shopMoney.amount | json }},
                &#x22;currencyCode&#x22;: {{ li.originalUnitPriceSet.shopMoney.currencyCode | json }}
            }
        },

        &#x22;product&#x22;: {
            {% comment %}rest of Product omitted{% endcomment %}
            &#x22;title&#x22;: {{ li.product.title | json }}
        },

        &#x22;quantity&#x22;: {{ li.quantity | json }},
        &#x22;refundableQuantity&#x22;: {{ li.refundableQuantity | json }},
        &#x22;requiresShipping&#x22;: {{ li.requiresShipping | json }},
        &#x22;restockable&#x22;: {{ li.restockable | json }},

        &#x22;sellingPlan&#x22;: {
            &#x22;name&#x22;: {{ li.sellingPlan.name | json }}
        },

        &#x22;sku&#x22;: {{ li.sku | json }},

        &#x22;taxLines&#x22;: [
            {% for tl in li.taxLines %}
                {% if forloop.first != true %},{% endif %}
                {
                    &#x22;priceSet&#x22;: {
                        &#x22;presentmentMoney&#x22; : {
                            &#x22;amount&#x22;: {{ tl.priceSet.presentmentMoney.amount | json }},
                            &#x22;currencyCode&#x22;: {{ tl.priceSet.presentmentMoney.currencyCode | json }}
                        },
                        &#x22;shopMoney&#x22;: {
                            &#x22;amount&#x22;: {{ tl.priceSet.shopMoney.amount | json }},
                            &#x22;currencyCode&#x22;: {{ tl.priceSet.shopMoney.currencyCode | json }}
                        }
                    },
                    &#x22;rate&#x22;: {{ tl.rate | json }},
                    &#x22;ratePercentage&#x22;: {{ tl.ratePercentage | json }},
                    &#x22;title&#x22;: {{ tl.title | json }}
                }
            {% endfor %}
        ],
        &#x22;taxable&#x22;:{{ li.taxable | json }},
        &#x22;title&#x22;:{{ li.title | json }},

        &#x22;totalDiscountSet&#x22;: {
            &#x22;presentmentMoney&#x22; : {
                &#x22;amount&#x22;: {{ li.totalDiscountSet.presentmentMoney.amount | json }},
                &#x22;currencyCode&#x22;: {{ li.totalDiscountSet.presentmentMoney.currencyCode | json }}
            },
            &#x22;shopMoney&#x22;: {
                &#x22;amount&#x22;: {{ li.totalDiscountSet.shopMoney.amount | json }},
                &#x22;currencyCode&#x22;: {{ li.totalDiscountSet.shopMoney.currencyCode | json }}
            }
        },

        &#x22;unfulfilledDiscountedTotalSet&#x22;: {
            &#x22;presentmentMoney&#x22; : {
                &#x22;amount&#x22;: {{ li.unfulfilledDiscountedTotalSet.presentmentMoney.amount | json }},
                &#x22;currencyCode&#x22;: {{ li.unfulfilledDiscountedTotalSet.presentmentMoney.currencyCode | json }}
            },
            &#x22;shopMoney&#x22;: {
                &#x22;amount&#x22;: {{ li.unfulfilledDiscountedTotalSet.shopMoney.amount | json }},
                &#x22;currencyCode&#x22;: {{ li.unfulfilledDiscountedTotalSet.shopMoney.currencyCode | json }}
            }
        },

        &#x22;unfulfilledOriginalTotalSet&#x22;: {
            &#x22;presentmentMoney&#x22; : {
                &#x22;amount&#x22;: {{ li.unfulfilledOriginalTotalSet.presentmentMoney.amount | json }},
                &#x22;currencyCode&#x22;: {{ li.unfulfilledOriginalTotalSet.presentmentMoney.currencyCode | json }}
            },
            &#x22;shopMoney&#x22;: {
                &#x22;amount&#x22;: {{ li.unfulfilledOriginalTotalSet.shopMoney.amount | json }},
                &#x22;currencyCode&#x22;: {{ li.unfulfilledOriginalTotalSet.shopMoney.currencyCode | json }}
            }
        },

        &#x22;unfulfilledQuantity&#x22;: {{ li.unfulfilledQuantity | json }},

        &#x22;variant&#x22;: {
            {% comment %}rest of variant omitted {% endcomment %}
            &#x22;title&#x22;: {{ li.variant.title | json }}
        },

        &#x22;variantTitle&#x22;: {{ li.variantTitle | json }},
        &#x22;vendor&#x22;: {{ li.vendor | json }}
    }
{% endfor %}
]

}

ไม่พบคำตอบที่คุณต้องการงั้นหรือ เราพร้อมช่วยเหลือคุณ