我試用一下 覺得這個 app 真的很強大
https://apps.shopify.com/ymq-options
可以增加很多變體之外 不同選項還可以有額外價格
注意看畫面上的 tooltip 文字 -> 所謂的 add-on price 還可以針對不同市場、設定不同數字
這實在是很神 這到底怎麼做到的?
首先 shopify 原生變體系統 vs 這種 app 提供的變體系統
核心差異可以看 app 廠商的這份文件
主要 ux 差異是:原生變體 才能有原生庫存管理、點擊變體切圖片
第一個知識點
size 跟 color 是我用 app 創的 virtual option
內容會真的出現在購物車
以及結帳頁面
這邊是使用 shopify 官方的 line item property 觀念
普通的購物車內容 property 就是 {}
使用到 virtual option 的內容 會出現在 property 內
以上兩張圖 是 shopify 官方 cart.js 回傳的 ajax 內容
詳細的規格 可以看官方文件
https://shopify.dev/docs/api/liquid/objects/line_item#line_item-properties
也就是說 shopify 官方以及各種 theme 的開發者
在條列購物車內容的時候 使用的 unique key 不是 variant id
而是 variant id + property
真的很酷!
然後官方以及各種 theme 都會記得把 line item property 給列出來!
下一個知識點
其中一個 line item property 叫做 _YmqItemPrice
這個就是實際的 add-on price 所在地
另外要知道 line item property 支援的是 key/value pair 都是字串而已
如您所見 那個價格也是字串 不是數字
然後呢 app 再根據 cart.js 內容 動態去修改購物車 DOM 的內容!
老實說 這種做法我覺得很暴力 這 app 等於是預設大多數的 theme 會用同樣的 DOM 結構
然後 app 再根據 market 不同 在前端根據 currency 動態運算去修改
實在是很暴力的寫法 感覺超容易有 bug 不過這 app 評價很高 所以可能也還好
我觀察了一下幾個 theme -> 在 DOM 價格的地方 的確就是 .cart-item .price
這樣查詢就會找到!
下一個知識點
我觀察 ajax 內容 只有出現代表原價的 3400 還有 _YmqItemPrice 的值
我沒看到最後的訂單金額 動態算出來去更新購物車 DOM 我可以理解
但最終金額是怎麼出現在結帳頁面的?
觀察發現 購物車前往結帳頁之前
會先呼叫一個 api 對象不是 shopify 而是 app 廠商!
然後在裡面會使用 graphql 協定呼叫 mutation draftOrderCreate
裡面有出現 priceOverride
amount
43.29
這些值!
官方文件在這裡
https://shopify.dev/changelog/set-custom-prices-in-draft-orders
這功能 2017 就上線了
https://www.shopify.com/partners/blog/introducing-shopify-s-draft-orders-api
然後在 /settings/apps/app_installations/app/ymq-options
頁面 也的確會看到有權限
最後,Draft Order 建立成功後,Shopify 會回傳一個可用的 invoiceUrl(Draft checkout URL) -> 前端最後跳轉到 invoiceUrl 就進入結帳頁面了!
1️⃣ 用戶選選項(前端)
↓
2️⃣ App 把 options 寫進 line item properties(_YmqItemPrice)
↓
3️⃣ 抽屜顯示時,JS 改畫面顯示加價後的小計(還沒真的改價)
↓
[User clicks "Checkout"]
↓
[Frontend JS] → POST https://api.ymq.cool/api/checkout
↓
[YMQ Server] → Calls Shopify Admin GraphQL draftOrderCreate()
↓
[Shopify] → Returns invoiceUrl (with priceOverride applied)
↓
[YMQ Server → Browser] → Redirect to invoiceUrl
↓
✅ Checkout page (shows final total 43.29)
雖然我覺得廠商 app 實作上有點暴力 但好像也是廣泛被接受
心得:shopify 生態系真的很強大