👜

Shopify アイテム追加/削除時 の customers/order.liquid 修正

2022/03/09に公開

やりたいこと

Shopify 管理画面 > 注文管理 > 編集 にてアイテム追加/削除を行う。その後、消費者の注文履歴を見るとこのアイテム追加/削除の情報がうまく反映されていない。どうすれば良いか調べていると、フォーラムで以下の質問を発見。

https://community.shopify.com/c/技術的なq-a/shopify管理画面で-アイテムを削除-数量を調整-した場合-ユーザー画面-注文履歴画面に反映されない/m-p/720130

しかし、order.refunds がサポート終了している?? のでこの手法は取れなさそうなので、備忘録がてら何をしたのかを残しておく。

Memo

order.line_items.size

アイテム追加/削除すると array size が増える。アイテム削除してもこの array は減らない。

size == 1 or not で条件分岐

order_nochange の true/false で条件分岐作り、対象の金額部分で出しわけをすれば今回の自分のケースは対応可能。今回はカートには1つしか入れらないという制約条件があったので、array size で条件分岐ができたが、制約条件がない場合はどのように実装するのが良いのだろう。

{% if order.line_items.size == 1 %}
  {% assign line_item = order.line_items[0] %}
  {% assign final_price = order.total_price %}
  {% assign order_nochange = true %}
{% else %}
  {% assign line_item = order.line_items[1] %}
  {% assign line_item_before = order.line_items[0] %}
  {% assign final_price = order.line_items_subtotal_price |minus: line_item_before.final_line_price  %}
  {% assign tax_rate = order.tax_lines[0].rate | plus: 1.0 %}
  {% assign final_tax = final_price |times: 1.0 |divided_by: tax_rate |divided_by: 100 |times: order.tax_lines[0].rate |times: 100  %}
  {% assign order_nochange = false %}
{% endif %}

true / false

小文字で書く

アイテム追加して、削除

order.total_refunded_amount にはデータは反映されない

tax_lines

https://shopify.dev/api/liquid/objects/tax_line

  • tax_line.price 合計値なので気を付ける。
  • tax_line.rate 小数点で入っている 8% なら 0.08

参考

Liquid って何?

みたいな状態(というか、普段コーディングしない)だったので、この書籍の第5章で概要を掴んだおかげで理解が進むのが早かった。特に Filters が分かりやすい。2-3ページでしたが。あとは Liquid 公式サイト、Shopify Cheat Sheet を読みながらで何とか進めることができた。

https://amzn.to/3KLao9R

Liquid 公式サイト

https://shopify.github.io/liquid/

assign

https://shopify.dev/api/liquid/tags/variable-tags?shpxid=65ff6fb9-A02C-4296-CAEA-2B5E12512F33

Shopify Cheat Sheet

https://www.shopify.com/partners/shopify-cheat-sheet

order.transactions

line_item ごとではないが、この方法で最終金額を取得することができる。
https://shopify.dev/api/liquid/objects/transaction

  • transaction.kind

    • authorization
    • capture
    • sale

    あたりで条件分岐をすればよさそう

  • transaction.amount
    返金等するとこの値がゼロになることがある

  • transaction.created_at

{%- -%} に関しての記事

空白の行が出力されなくなるとのこと
https://www.eyesofc.co.jp/webeyes/category/netshop/689/

シンギュラリティ・ソサエティ

Discussion