FROM CACHE - jp_header

Shopify管理画面で「アイテムを削除」「数量を調整」した場合、ユーザー画面>注文履歴画面に反映されない

takahiron
Shopify Partner
15 0 1

 

・設定>チェックアウト>顧客アカウント>アカウントを任意にする または アカウントを必要とする
と設定した場合に、ユーザー画面で確認できる下記2つのテンプレートについて、
不明点があり、質問を挙げさせていただきました。

 

 /account/     マイページ
 /account/orders/  注文履歴(詳細)

 

■質問内容
上記2つのテンプレートに、注文の合計金額が表示されますが、
・Shopify管理画面>注文管理>該当注文の詳細画面>編集>アイテムを削除
または
・Shopify管理画面>注文管理>該当注文の詳細画面>編集>数量を調整
の操作した場合でも、ユーザー画面の上記2テンプレートに変更が反映されず、
従来の内容のままとなっております。
※管理画面側は、正しく変更されております。
※テンプレートはDebutをカスタマイズせずに利用しております。

 

 

こちらテンプレートを調整し、改善できるなど
方法がありましたらご教授いただければ幸いです。

 

8件の返信8

junichiokamura
Community Manager
1200 280 506

以下の修正は参考になりますでしょうか?

 

customer/order.liquidの最初に以下のコードを挿入

{% assign cancelled_subtotal = 0 %}
{% for refund in order.refunds %}
{% for item in refund.refund_line_items %}
{% assign cancelled_subtotal = cancelled_subtotal | plus:item.line_item.price %}
{% endfor %}
{% endfor %}
{% assign final_cancelled_with_tax = cancelled_subtotal| times:1.1 %}
{% assign order_subtotal_with_tax = order.subtotal_price| times:1.1%}
{% assign shipping_with_tax = order.shipping_price| times:1.1%}
{% if final_cancelled_with_tax == order_subtotal_with_tax %}
{% assign final_cancelled_with_tax = final_cancelled_with_tax | plus:shipping_with_tax %}
{% endif %}


 {{ order.total_price | money }} を {{ order.total_price | minus:cancelled_subtotal | money }} に置き換え。

Senior Partner Solutions Engineer
ill_support
Shopify Expert
1 0 0

こちら私も同様の事で困っておりまして、頂きましたタグを挿入した際には、

/account/orders/  注文履歴(詳細)

の合計金額は変更が出来ました。

 

ただ、小計金額には、「アイテムを削除」「数量を調整」を考慮した金額が反映されておらず、

アイテムを削除した場合は、ユーザー側の注文履歴(詳細)からも削除したいのですが、

こちらは修正は可能なものでしょうか?

 

また、/account/

ページで表示される合計金額も「アイテムを削除」「数量を調整」を考慮した金額を表示したいのですが、可能でしょうか?

お手数をお掛けしますが、ご確認の程よろしくお願いします。

junichiokamura
Community Manager
1200 280 506

Liquidの知識が必要になりますが、

https://shopify.dev/docs/themes/liquid/reference/objects/order

>  ただ、小計金額には、「アイテムを削除」「数量を調整」を考慮した金額が反映されておらず、

{% for refund in order.refunds %}
{% for item in refund.refund_line_items %}

これを応用して、承継金額の表示部分も同じように修正する必要があると思います。

ページで表示される合計金額も「アイテムを削除」「数量を調整」を考慮した金額を表示したいのですが、可能でしょうか?

Liquidのcustomerから同様のorderが参照できるので、同じ修正が可能かと思います。

https://shopify.dev/docs/themes/liquid/reference/objects/customer#customer-orders

 

 

 

Senior Partner Solutions Engineer
Takuma
Shopify Partner
44 7 25

同じ現象で悩んだので、そういった明細に触るためのLIQUID例はこれ。

ご参考になれば。

{% for order in customer.orders %}

のループ内で、以下を入れれば返品や削除された商品を特定できます。

{% for refund in order.refunds %}
{% for item in refund.refund_line_items %}
{{ item.line_item.title}}
{% endfor %}
{% endfor %}
 
POSTMANとかでOrderAPIの結果を見るとどこにどういった要素でデータが入ってるので探せます。
YasutakaNishii
Shopify Partner
9 0 1

こちらの方法は現時点 (2022/03) で実施することはできないのでしょうか。

 

上記コードを入力してブラウザを開くと、Internal Liquid Error と表示されます。

また、公式ドキュメントから order.refunds が消えております。

Cheat Sheet に refund で検索してもでてこないです。

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

junichiokamura
Community Manager
1200 280 506

元々refundsの情報は公式のLiquidドキュメントになかったかもですが、以下の、
https://shopify.dev/api/liquid/objects/order#order-total_refunded_amount

order.total_refunded_amountと、

order.transactionsの、
https://shopify.dev/api/liquid/objects/transaction

transaction.kindやtransaction.statusから、返金額とその取引明細は出せると思います。 
ひょっとすると、2021年後半のOS 2.0 への移行によって、いくつかの非公式のLiquidが廃止になっている可能性もあります。

Senior Partner Solutions Engineer
junichiokamura
Community Manager
1200 280 506

あとは、liquidのみでの解決ではなくなりますが、カスタムアプリ(パートナーダッシュボードから作成するタイプ)とapp proxiesの仕組みを使ってサーバーでAPIでデータを引いてそれをLiquidに反映する、といったアプローチも可能です。 

https://shopify.dev/apps/online-store/app-proxies

 

ログインしているcustomerのidをapp proxies経由でサーバーに渡して、customer -> order -> refunds -> refund line items と辿れば、元々のLiquidで参照できていたデータを取得できます。
https://shopify.dev/api/admin-graphql/2022-01/objects/RefundLineItem#fields

 

以下のようなマイページへのオーダー管理機能追加アプリは、同じようなことを内部でやっています。

https://apps.shopify.com/orderify?locale=ja

 

app proxiesについては、以下でも解説しています。

https://www.youtube.com/watch?v=w31mCsEWGhQ&list=PLkR3LRtxAZfqujVTfvuHGpNgVTdbrwJRK&index=12

Senior Partner Solutions Engineer
YasutakaNishii
Shopify Partner
9 0 1

回答ありがとうございました。

アイテム追加して、削除するとorder.total_refunded_amount にはデータが反映されないようです。

(¥ 0 のまま)

 

一方で

- transaction.kind

- transaction.status

- transaction.amount

を利用すれば、最終金額は取れるのでそちらで対応したいと思います。