はじめに
Shopifyの商品ページでは、特定のタグがついている商品に対してラベルを表示することができます。しかし、デフォルトの contains
を使った判定では 大文字・小文字が区別される ため、意図した通りにラベルが表示されないことがあります。
今回は、ShopifyのLiquidテンプレートで タグの大文字・小文字を問わず判定する方法 を紹介します。
本記事の信頼性
![](https://okalog.info/wp-content/uploads/2023/02/okalog.jpg)
30歳から異業種への転職をして、Shopify Experts企業で1年半ほどフルリモートで勤務していました。
現在は名古屋の自社開発企業のフロントエンドエンジニアしています。フリーランスとしても活動しています。
これまでのコードと問題点
従来のコードでは、商品タグに基づいて NEW
や LIMITED
などのラベルを表示していました。
{% if context_item.tags contains 'new' %}
<span>NEW</span>
{% endif %}
{% if context_item.tags contains 'Limited' %}
<span>LIMITED</span>
{% endif %}
{% if context_item.tags contains 'sale' %}
<span>SALE</span>
{% endif %}
問題点
このコードでは contains
を使ってタグを判定していますが、ShopifyのLiquidでは 大文字・小文字を区別して比較 します。そのため、
NEW
→ OK(contains 'new'
がtrue
)New
→ NG(contains 'new'
がfalse
)sale
→ OKSale
→ NG
といった問題が発生し、ラベルが正しく表示されないことがあります。
解決方法:タグを小文字に統一して判定する
この問題を解決するために、タグのリストを すべて小文字に変換 してから判定するように修正します。
修正後のコード
{% assign tags_downcase = context_item.tags | join: ',' | downcase | split: ',' %}
{% if tags_downcase contains 'new' %}
<span>NEW</span>
{% endif %}
{% if tags_downcase contains 'limited' %}
<span>LIMITED</span>
{% endif %}
{% if tags_downcase contains 'sale' %}
<span>SALE</span>
{% endif %}
仕組みの解説
この修正では、タグのリストを以下の手順で変換しています。
context_item.tags | join: ','
→ タグをカンマ区切りの文字列に変換| downcase
→ すべて小文字に変換| split: ','
→ 再び配列に変換
この処理によって、タグが すべて小文字のリスト になるため、contains
を使った比較時に 大文字・小文字を問わず判定 できるようになります。
動作確認
例えば、以下のようなタグが登録されている商品があったとします。
Tags: NEW, Sale, Limited
この修正後のコードでは、以下のように正しくラベルが表示されます。
✅ NEW
→ NEW
のラベルが表示される(大文字・小文字の違いを無視)
✅ Sale
→ SALE
のラベルが表示される
✅ Limited
→ LIMITED
のラベルが表示される
まとめ
今回の修正では、Liquid の contains
が 大文字・小文字を区別する問題 を解決しました。
✅ downcase
を活用してタグリストを小文字に統一
✅ split
で配列の形を維持
✅ contains
で大文字・小文字を問わずタグを判定
これにより、Shopifyの商品タグの判定をより柔軟に行うことができます!
今後もLiquidの活用方法を学びながら、より便利なストアカスタマイズをしていきましょう! 🚀