
Shopify Liquidで日付を使った条件分岐する方法を解説します。例えば期間中に特定の商品を表示する、期間限定のセールを行うなど、日付を使った条件による出し分けが可能です。
日付をLiquidで扱う
Shopify Liquidでは、date
フィルターを使って日付を扱うことができます。date
フィルターは、指定したフォーマットで日付を表示することができます。以下は、コード例です。
{{ 'now' | date: '%Y-%m-%d' }}
-> 2025-02-17
{{ 'now' | date: '%Y-%m-%d %H:%M:%S' }}
-> 2025-02-17 12:34:56
{{ 'now' | date: format: 'basic' }}
-> 2025/2/17
フォーマットの指定方法は、Rubyのstrftime
メソッドと同様です。詳細はShopify公式ドキュメントを参照してください。
日付を使った条件分岐
日付の比較は文字列のままでもできます。ここでは、today
変数に現在日付を、start_date
変数に開始日を、end_date
変数に終了日を代入し、その範囲内かどうかを比較する例を示します。
{% comment %} 2025-02-17 {% endcomment %}
{% assign today = 'now' | date: '%Y-%m-%d' %}
{% assign start_date = '2025-02-01' %}
{% assign end_date = '2025-02-28' %}
{% if today >= start_date and today <= end_date %}
セール中です
{% else %}
セールは終了しました
{% endif %}
-> セール中です
ただし、文字列比較は辞書順で行われるため、日付の比較を行う場合は、日付の数字だけに変換してから比較することが望ましいです。例えばstart_dateに2025-2-1
という文字列が入っている場合、今日の日付が2025-02-17だとすると、文字列比較だと2025-2-1
> 2025-02-17
となってしまい、期間外と判定されます。
{% comment %} 2025-02-17 {% endcomment %}
{% assign today = 'now' | date: '%Y-%m-%d' %}
{% assign start_date = '2025-2-1' %}
{% assign end_date = '2025-02-28' %}
{% if today >= start_date and today <= end_date %}
セール中です
{% else %}
セールは終了しました
{% endif %}
-> セールは終了しました
こうしたミスを防ぐためにdateフィルターを使い、Unixタイムスタンプの形式に変換してから比較する方が安全です。
{% comment %} 2025-02-17 {% endcomment %}
{% assign today = 'now' | date: '%s' %}
{% assign start_date = '2025-2-1' | date: '%s' %}
{% assign end_date = '2025-02-28' | date: '%s' %}
{% if today >= start_date and today <= end_date %}
セール中です
{% else %}
セールは終了しました
{% endif %}
-> セール中です
メタオブジェクトを使った日付の取得
例えばセール期間をメタオブジェクトで管理しているケースを想定します。最近ではテーマエディタにメタオブジェクトを埋め込むことが多いでしょう。
ここでは、test_sale
という期間限定セールを設定して表示の出し分けてみましょう。
メタオブジェクトの定義をします。キャンペーンオブジェクトで以下のフィールドを設定しました。
name
: セール名start_date
: 開始日end_date
: 終了日
続いてキャンペーンのエントリーを作成しました。
最後に以下のLiquidコードを記述します。
{% comment %} 2025-02-17 {% endcomment %}
{% assign today = 'now' | date: '%s' %}
{% assign test_sale = metaobjects['campaign']['test_sale'] %}
{% assign start_date = test_sale.start_date.value | date: '%s' %}
{% assign end_date = test_sale.end_date.value | date: '%s' %}
{% if today >= start_date and today <= end_date %}
{{ test_sale.name }}中です
{% else %}
{{ test_sale.name }}は終了しました
{% endif %}
無事期間限定セール中の判定と表示ができました🎉
まとめ
Shopify Liquidで日付を使った条件分岐する方法を解説しました。日付を使った条件分岐は、期間中に特定の商品を表示する、期間限定のセールを行うなど、ECサイト運営において重要です。ぜひご活用ください。