Shopifyでcollectionの選択条件を取得して判別する

Shopify

フォーラムで見かけて少し調べて試したのでメモとして。今後使う可能性は低い仕組みですが。

実現したいこと

  • Shopifyの自動コレクションで、選んだ各項目を取得し判別する

用意された手法では実現できないので、独自の方法を模索する必要があります。

サンプルコード

以下は「商品タイプ」に「Bracelet」が選ばれているかどうかを判定するためのサンプルとなります。


{%- liquid
  assign key = 'Bracelet' 
  assign collection_array = collection | json | remove: '"' | remove: '{' | remove: '}'  | remove: '[' | remove: ']' | split: ','
  for collection_array_elem in collection_array
    if collection_array_elem contains 'condition'
        assign collection_conditions = collection_conditions | append: ',' | append: collection_array_elem | remove: 'condition:'
    endif
  endfor
  assign collection_conditions_array = collection_conditions | remove_first: "," | split: ','
-%}

{% if collection_conditions_array contains key %}
  {{key}}を含んでいる
{% else%}
  {{key}}を含んでいない
{% endif %}

基本的には、collectionオブジェクトをJSON形式で取り出して文字列として扱えるようにしてから、適宜切り出して必要な要素を取得するという流れです。

{{ collection | json }}のようにして中身を確認することで目的の要素を探す必要がありますが、対象さえわかれば色々と応用が効くかと思います。

誤判定リスクの高い簡易版


{% assign collection_json = collection | json %}
{% if collection_json contains '"Bracelet"' %}
Braceletが設定されています
{% else %}
Braceletが設定されていません
{% endif %}

collectionオブジェクトが文字列になっているのであれば、単純に目的の語句を含んでいるかどうかで判定可能です。

ただし、当然ながら意図しない場所に目的の語句が含まれている場合には意図しない動作になるためリスクの高い手法と言えます。

留意事項

  • おそらく非公式の方法
  • collectionオブジェクトの中身が変わると動作しない可能性がある
  • 本来はJSで扱う方が良さそう

結び

できると言えばできますが、やるべきかどうかと言われると微妙な印象です。

0人がこの記事を評価

役に立ったよという方は上の「記事を評価する」ボタンをクリックしてもらえると嬉しいです。

連投防止のためにCookie使用。SNSへの投稿など他サービスとの連動は一切ありません。

コメント欄