カート画面のLiquid編集 数量が変更された場合の小計の取得について

Topic summary

カート画面で表示している小計に対し、JavaScriptで10%加算した金額を出しているが、数量変更後もLiquidで取得した小計が初期表示のまま更新されない、という相談。

  • 結論:Liquidはサーバー側でHTML生成時に評価されるため、ページ遷移や再描画がない限り値は動的更新されない。
  • 数量変更をJavaScriptで処理しているテーマでは、Liquidだけで最新小計を取るのは難しく、ShopifyのAjax APIでカート情報を再取得する方法が案内された。

数量変更をどう検知するかはテーマ依存という整理。

  • テーマが数量変更時にページを再読み込みするならLiquidで対応可能。
  • 再読み込みせずJSで更新するなら、数量変更に使われているイベントハンドラ(例:onchange)をテーマコードから特定し、そのタイミングでAjax APIを呼ぶ必要がある。

補足としてWebhookも候補に挙がったが、通知遅延や追加実装が必要なため、ストアフロントのリアルタイム反映には不向きとされた。最終的に、テーマコードを分析して対応を進める方針になっており、完全解決までは至っていない。

Summarized with AI on March 9. AI used: gpt-5.4.

お世話になっております。

カート画面のLiquid編集 数量が変更された場合の小計の取得について質問がございます。

テーマ:Debut

カート画面の小計をjavascriptにて、金額に10%を乗算した結果を表示しています。
小計は


することで、取得できるのですが、数量が変更された場合に動的に変更されずに初期表示のままの金額となります。
こちら数量の変更に動的に変更される小計を取得する方法はありますでしょうか?

shopify developer のcart-liquidも拝見しましたが、その辺りの記述がなく行き詰まっております。

お教えいただければ幸いです。
よろしくお願いいたします。

Liquidは、Shopifyが画面全体をブラウザに送る前にShopify側で分析して結果をHTMLに反映して返すものなので、Shopifyへの遷移がないと値は更新されません。なので、カートの変更がJavaScriptで行われている場合は、反映されません。カートの更新や情報の取得をJSで行うには以下のAjax APIが使えるので、これを試してみてください。

https://shopify.dev/docs/themes/ajax-api

ご回答ありがとうございます。
カート更新のAPIについて承知しました。

もう1点質問がございます。

こちらのAPIを呼ぶタイミングは数量が変更された時になるかと存じますが、その数量が変更されたことはどのように監視すればよろしいでしょうか?
テーマ共通の監視できるLiquidの要素がございましたらご教授していただきたいです。

よろしくお願いいたします。

数量が変更されるトリガーは各テーマがどのように実装しているかによるので、テーマのコード分析が必要です。

ブラウザの開発コンソールでの調査と、テーマのダウンロードとエディタでの検索などが必要になるかと思います。

大きく分けて、カートの数量を変更した時に、Shopifyに遷移して画面がリフレッシュされる動作であれば、Liquidで対応可能ですが、JavaScriptで遷移なしに行っている場合は、カートの数量変更が反映されるJavaScriptのイベントハンドラ(onchangeなど)を特定して、そこでAjax APIを呼ぶことになるかと思います。

早速のご回答ありがとうございます。
わかりました。コードを分析し数量や小計などを監視してする対応で進めようかと思います。

またこの辺りアプリのマニュアルなどでLiquidの編集箇所など記載しておく必要がありそうですね。

あとは、テーマに依存せず変更を取得する方法としてWebhookがあります。

https://shopify.dev/docs/admin-api/rest/reference/events/webhook

ただし、Webhookは送信が遅れたり、通信が途絶える可能性もあるのでリアルタイムにストアフロントを変更するには向かないと思います。

また、通知を受け取った後にテーマに反映させるのに追加の開発が必要かと思います。

(web socketなどをwebhookを受け取るサーバー側で実装してそことテーマを通信させるような仕組みを作る必要があります)

1 Like