カートドロワーにギフトまたはバンドルが通常価格で表示される
カート合計とチェックアウトが正しいにもかかわらず、カートドロワーにギフトまたはバンドル商品が通常価格で表示される場合は、ドロワーが価格をどのように読み取り、更新しているかを確認してください。古いLiquid価格フィールドでは自動割引が反映されないことがあり、ドロワーが古いカートのスナップショットを保持している場合もあります。この記事では、これらのケースを見分ける方法を説明します。
簡単な確認: 合計は正しいですか?
何かを変更する前に、誤った価格が実際にどこに表示されているかを確認してください。
- ドロワーの明細行ごとの価格が誤っている(ギフトまたは割引商品が通常価格で表示される)一方で、ドロワー下部のカート小計とチェックアウト合計が正しい場合、これは表示だけの問題です。そのまま読み進めてください。
- チェックアウト合計自体が誤っている場合は、別の問題です(例えば、別の割引アプリとの重複や、割引の不一致など)。この記事では、このケースは扱いません。
Bundlexはカートドロワーを表示するものではありません。割引はチェックアウト時に実行されるShopifyのカート割引関数によって適用され、Bundlexがテーマの明細行ごとの価格表示を書き換えることはできません。
ドロワーに通常価格が表示される理由
BundlexはShopifyのカート割引関数を通じて割引を適用します。この関数はカートの明細行に割引を割り当てます。Shopifyでは、これは自動割引の一種として扱われます。
問題は、一部のテーマが各カート明細行を表示する方法にあります。古いカートドロワーやカスタムのカートドロワーでは、Liquidフィールドline_item.priceとline_item.line_priceを使って明細行価格を表示します。Shopifyの公式ドキュメントでは、これらのフィールドは自動割引が反映されないため、非推奨とされています。そのため、Shopifyがその明細行に割引を正しく記録していても、ドロワーには割引前の元の価格が表示されます。
購入者に表示される結果は次のとおりです。バンドル内のすべての明細行に同じ通常の単価が表示され、無料のギフト行が請求されているように見えることがあります。一方、小計とチェックアウトは割引後の値から計算されるため正しく表示されます。
/cart.jsで確認する
ドロワーの表示内容に関係なく、割引が正しく適用されていることを確認できます。
- ストアフロントで、バンドル(または無料ギフト付きのオファー)をカートに追加します。
- ブラウザで、同じストアの
/cart.jsを開きます(例えば、https://yourstore.com/cart.jsにアクセスします)。 - 該当する明細行を見つけ、
final_priceとfinal_line_priceを確認します。
正常に動作している無料ギフトの明細行では、final_price: 0やfinal_line_price: 0のように表示され、割引はその明細行のdiscounts(オファーのタイトルと割引後の金額)の下に記載されます。ドロワーが実際にどのフィールドを表示しているかを確認してください。上記の非推奨化はLiquidのline_item.priceとline_item.line_priceに適用されます。/cart.jsのレスポンスだけでは、ドロワーのデータソースは特定できません。
結果の解釈:
final_price/final_line_priceに割引が反映されているのに、ドロワーには通常価格が表示される場合。ドロワーが表示するフィールドと、カート変更後にドロワーが更新されるかどうかの両方を確認してください。final_priceに割引が反映されていない場合。この場合、問題はドロワーの表示ではありません。代わりにカート関数側を確認してください(例えば、バンドルに正しくタグが付いているか、割引メタフィールドが最新か、B2Bや顧客タグなどの顧客適用条件が適用されているか)。
解決方法: final_priceとfinal_line_priceを使用する
カートドロワーのLiquidスニペットが現在の価格にこれらの非推奨フィールドを使用している場合は、final_に対応するフィールドへ置き換えてください。
line_item.priceをline_item.final_priceに置き換えます。
line_item.line_priceをline_item.final_line_priceに置き換えます。
final_フィールドには、行単位の割引が含まれます。ドロワーでJavaScriptを使用している場合は、変更後に最新のカートレスポンスまたは更新されたテーマセクションを描画していることも確認してください。価格フィールドを置き換えるだけでは、古いスナップショットは修正されません。
行ごとの
price値は静的なLiquid属性であるため、Bundlexが自動的に書き換えることはできません。割引データはすでにfinal_priceに含まれており、テーマ側で読み取るだけで反映されます。
ネイティブの比較価格
を使用している場合バリエーションにShopifyのcompare_at_price(「50%オフ」のような取り消し線)が設定されている場合、そのバッジはバリエーションデータをもとにテーマが表示するもので、Bundlexの割引とは関係ありません。final_フィールドに切り替えると、行価格にはBundlexの割引が反映されます。一方、比較価格の取り消し線は、テーマの設定どおり引き続き表示されます。
もう1つのケース: $0のギフト行が残る場合
関連する別の症状として、無料ギフトを含むオファーを顧客が選択した後、メイン商品の数量をオファーの条件未満に減らすケースがあります。メイン商品の行は正しく下位のティアに切り替わりますが、無料ギフトの行がカートに残り、$0と表示されます。
理由は次のとおりです。数量が条件を下回ると、カート機能は正しく割引を停止し、割り当てを解除します。ただし、Shopifyのカート機能ではカート行を削除できません(削除操作が用意されていないためです)。無料ギフトがカタログ上の$0のバリエーションとして設定されている場合、「戻す」価格が存在しないため、条件を満たさなくなったギフト行が$0のまま残ります。
これに対応するため、Bundlexにはカート変更後に実行され、孤立したギフト行を削除するウィジェット側のクリーンアップ機能が含まれています。実行できる条件があります。
- 無料ギフトのみです。 有料の追加商品はバンドルの整合性によって処理され、このクリーンアップの対象ではありません。
- 対応するカート変更経路。Bundlexウィジェット全体が有効な場合、クリーンアップはfetchとXHRによるカート変更の両方を処理します。ウィジェットを使用せず、ギフトクリーンアップスクリプトのみを実行しているページでは、fetchによる変更のみがインターセプトされます。テーマの更新動作によっては、ドロワーの表示に影響する場合があります。
- クリーンアップは可能な範囲で実行されます。 いずれかの手順に失敗すると、次回のカート操作までギフト行が画面上に残る場合があります。
行を削除した後、Bundlexはテーマの再描画を促すカート更新イベントを発行します。DawnおよびDawnをベースにした無料のShopifyテーマでは、Bundlexがカートドロワー、カートページ、カートアイコンの数量も再描画します。すべてのShopifyテーマが実装している単一のカート更新イベントは存在しないため、これらのイベントをリッスンしない他のテーマでは、次の操作までドロワーが古い状態のままになる場合があります。最も重要な点は、カートの計算は常に正しいということです。残った$0の行に対して顧客が請求されることはなく、ドロワーに一時的に表示される内容にかかわらず、チェックアウトの合計金額は正確です。
まとめ
- ドロワーには通常価格が表示されるものの、合計金額とチェックアウトは正しい場合: 非推奨のLiquid価格フィールドまたは古いカートデータを確認してください。
/cart.jsを確認してください:final_price/final_line_priceに割引が反映されます。- テーマで修正するには、これらのフィールドを
final_priceとfinal_line_priceに切り替えてください。 - 数量を減らした後に$0のギフト行が残るのは想定される動作です(Shopifyでは行を削除できません)。Bundlexは対応テーマでこの行をクリーンアップし、チェックアウト時の価格は常に正しくなります。
この記事は役に立ちましたか?
皆さまからのフィードバックがドキュメントの改善に役立ちます。