カートに入った商品によってアップセルを出し分けしたい

Topic summary

テーマは、カート内の商品IDに応じてアップセルを出し分けたい(Liquid: Shopifyのテンプレート言語)。とくに「特定の2商品が同時に入っている場合」に表示を切り替えられるかの質問。

投稿コードの要点(cart-template.liquidにインクルード):cart.itemsをlimit:1でループし、item.product.idで分岐。andで2つのID同時判定を試みて「同時購入がお得です」を表示しようとしている。コード片が理解に必須。

指摘された問題点:

  • limit:1により1商品(実質最後に入れた商品)しか判定しない。
  • and 条件の記述が誤り。
  • たとえ修正しても、item.product.idは単一IDなのでANDで2IDを同時に満たせない。
  • そのため「特定の商品がカートにあるか」の判定も意図通り動いていない可能性。

対応の方向性: カート全体を走査して該当商品の存在をフラグ変数で保持し、ループ後に「両方揃っている」かを判定する等の実装が必要(他の方法もありうる)。

結論・現状: 記載コードだけでは実現不可。具体的な修正コードは未提示で、議論は未解決のまま。

Summarized with AI on February 8. AI used: gpt-5.

以下のようなコードを記述したliquidをcart-template.liquidにインクルードしています。

カートに入った商品(id)によって表示するアップセルを出し分けしています。

2商品同時に入った時という条件でも設定可能でしょうか?

{% for item in cart.items limit:1 %}
{% if item.product.id == 7028163838122 and 7028163969194 %}

同時購入がお得です

{% elsif item.product.id == 7028163838122 %}

商品Aがお得です

{% elsif item.product.id == 7028163969194 %}

商品**B**がお得です

{% endif %} {% endfor %}

2商品同時に入った時という条件でも設定可能でしょうか?

記載されたコードで実現できるかという意味でしたら以下の点から無理かなと思います。

  • limit:1 が記載されているので最後にカートに入れた商品しか判定しない
  • andのif文が間違っている
  • limit:1がなくandのif文が正しかったとしても、判定に用いられるidは1つなので、andで指定した2つを同時に満たすことは不可能

limit:1 の影響で「特定の商品がカートに入っているか否か」の判定も意図したようには動かないないように思うのですが動いていますでしょうか?

動いている場合は私の勘違いなので大変申し訳ありません。

以上ですが、仮に私が処理を書くとすればフラグ変数を作って対応するかなと思いますが、他にも方法はあると思いますので、状況やご要望にあった処理で対応されるのが良いかなと思います。