FROM CACHE - jp_header

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

misen82729
Shopify Partner
6 0 1

商品には複数のコレクションが登録してあり、その複数の中に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つだけ表示したい場合は、どのように書くのが正しいでしょうか。

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

3件の返信3

株式会社フルバランス
Shopify Partner
1516 544 682

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 %}

 ご参考までに。

 

フルバランス 園畑

株式会社フルバランス(Shopify Experts)
Shopify専門のEC成長支援会社です。ストアの新規構築から運用や改善のサポートなどShopifyに関する幅広いサービスを行なっております。
ECの技術・実務・成長、お悩みのことがあれば、お気軽にご相談ください。
『すべてのブランドの特大成長エンジンを搭載する』 株式会社フルバランス
misen82729
Shopify Partner
6 0 1

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

 

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

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

 

misen82729
Shopify Partner
6 0 1

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

 

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

 

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

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

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

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