特定コレクションでボタンの表示 / 非表示をしたい (商品には複数コレクションが登録済み)

Topic summary

商品が複数のコレクションに登録されている状況で、特定のコレクション(A、B、C)に含まれている場合にボタンを非表示にする条件分岐の実装方法についての質問。

当初の試み:

  • for collection in product.collections でループし、if collection.handle で条件分岐したが、登録コレクション数分ボタンが重複表示される問題が発生
  • URLパス(request.path contains)での条件分岐も試したが、コレクションページ以外では動作しなかった

提案された解決策:

  • hideButton という変数を false で初期化
  • ループ内で特定のコレクションハンドルに一致したら hideButton = true に設定
  • ループ終了後に hideButton の値で表示/非表示を判定

最終的な解決:

  • コレクションA、B、Cを自動でまとめる「コレクションD」が存在していたことが判明
  • collection.handle ではなく collection.title == 'コレクションD' で条件分岐することで意図通りの動作を実現
  • handle では全商品が対象になってしまったが、title では正常に動作した(理由は不明)
Summarized with AI on November 21. AI used: claude-sonnet-4-5-20250929.

商品には複数のコレクションが登録してあり、その複数の中に1つでも条件に合うコレクションが含まれていればボタンを表示、または非表示にしたいと思っています。

最初は

{% for collection in product.collections %}

を使ってif文で

{% if collection.handle == 'コレクションA' or 'コレクションB' or 'コレクションC' %} ボタン非表示 {% else %} ボタン表示 {% endif %}

(そのコレクション名が含まれていないコレクションの商品だけボタンを表示させたかった)

で書いていたのですが、複数のコレクションに登録しているため、登録しているコレクション分ボタンが表示されてしまい(4個とか5個とか)、for文で書くのではなくURLで条件分岐しようとしました。

{% if request.path contains '/collections/コレクションA' or '/collections/コレクションB' or '/コレクションC' %}
ボタン非表示の時のコード(空ではなくボタンではないコードが入ります)
{% else % }
ボタン表示の時のコード
{% endif %}

上記だとすべての商品ページでボタン非表示の時のコードとなります

それ以外のところで、そのコレクションに含まれていないページだけ表示させたいものがあったので

{% unless request.path contains '/collections/コレクションA' or '/collections/コレクションB' or '/コレクションC' %}
表示させたいもの
{% endunless %}

としたのですが、どのURLでも表示されません。

複数登録しているコレクションの中にA, B, Cのいずれかが入っている場合でボタンを非表示にする場合、それ以外のコレクションではボタン1つだけ表示したい場合は、どのように書くのが正しいでしょうか。

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

Aika827様

ご質問を確認しました。

いただいた質問の想定通りかはわかりかねますが、

下記コードの形でボタン表示、非表示を決められるのはいかがでしょうか?

{% assign hideButton = false %}
{% for collection in product.collections %} 
    {% if collection.handle == 'コレクションA' or 'コレクションB' or 'コレクションC' %} 
     {% assign hideButton = true %}
    {% endif %}
{% endfor %}

{% if hideButton == true %} 
    ボタン非表示
{% else %}
    ボタン表示
{% endif %}

ご参考までに。

フルバランス 園畑

株式会社フルバランス 園畑様

ご回答いただきありがとうございます。ご教示いただいたコードにて試してみたのですが、登録コレクションに関わらず、全ての商品ページで「hideButton = true」の状態としてボタンが非表示の状態になってしまいました。trueをfalseに変えると表示は変わるのですが、常に全商品同じ表示になります。

URLで試しても同じ状態だったので、コレクションをうまく取得できていないのでしょうか。。

コレクションを確認していたところ、コレクションA, B, Cを自動でまとめるコレクションDがあり、hundleではなくtitleで

collection.title == 'コレクションD'

とすると思い通りの表示になりました (hundleの時はきちんとURLのハンドルを入れていました)

なぜかhundleでは反応せず、titleだとOKでした。

titleも’A’ or ‘B’ or 'C’では全商品が対象になっていたので、今回のtitleでなぜうまくいったのかがわからないのですが、おかげさまで無事に解決しました :folded_hands:

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