商品ハンドルによる条件分岐がうまく機能しない

AI-generated summary

商品ハンドルによる条件分岐で、特定の商品ごとに異なるスニペットファイルを読み込む実装がうまく機能しない問題が報告されました。

問題の内容:

  • 商品A・Bには product-a.liquid を、商品Cには product-c.liquid を読み込みたい
  • しかし、商品Cでも product-a.liquid が読み込まれてしまう

原因:
条件分岐のコードで {% if product.handle contains 'A' or 'B' %} という記述が問題でした。この書き方では「product.handleが’A’を含む、または’B’が真(常に真)」という意味になり、意図した条件分岐になっていませんでした。

解決方法:
条件を {% if product.handle contains 'A' or product.handle contains 'B' %} に修正することで、正しく動作するようになりました。

結果: 質問者は無事に問題を解決できました。

一部の商品詳細ページで異なるデザインにしたく、条件分岐で別々のスニペットファイルを読み込みたいのですがうまくいきません。

現状は下記のとおりです。

  • 商品詳細ページでセクションファイルpage-product.liquidを挿入。

  • page-product.liquid内で商品A(ハンドル A)とB(ハンドル B)はスニペットファイルproduct-a.liquidを、商品C(ハンドル C)はスニペットファイルproduct-c.liquidを読み込みたい。
    そのためにセクションファイルpage-product.liquidで下記のように実装。

          {% if product.handle contains 'A' or 'B' %}
            {% render 'product-a' %}
          {% elsif product.handle == 'C' %}
            {% render 'product-b' %}
          {% endif %}
    

しかし商品Cでもproduct-a.liquidの内容が読み込まれてしまいます。
条件分岐の使い方として間違っているのでしょうか。

ご回答頂けますと幸いです。

@ec_man 様

ご質問いただたいている、商品ハンドルによる条件分岐がうまくいかない件ですが、記載いただいているコードを拝見すると、一行目の条件は「product.handleが’A’を含む、または’B’が真である(つまり、常に真)」という意味になりますので、下記のように最初の条件を変更いただけましたら、ご要望の分岐になるかと思います。

{% if product.handle contains 'A' or product.handle contains 'B' %}
  {% render 'product-a' %}
{% elsif product.handle == 'C' %}
  {% render 'product-b' %}
{% endif %}

ご参考まで
(キュー小坂)

無事に解決しました!

ありがとうございました!