メタフィールドを使ってカートページの購入ボタンを切り替えたい

Topic summary

メタフィールド(end_time)で販売終了時刻を設定し、カートページでも購入ボタンを無効化したい課題。商品ページでは制御済みだが、カートに入った商品は購入できてしまうため、カート画面での抑止を実装したい。

提示コードはcart.itemsを走査し、end_timeと現在時刻の差分でボタンの有効/無効を切り替える意図。しかし「反映されない」状況の具体が不明で、for文の誤りを疑っている。コードスニペットが理解の中心。

最新の指摘はShopify Liquidのdateフィルタ仕様に関するドキュメント引用。nowは「Liquidが最後にレンダリングされた時刻」で、キャッシュにより表示ごとに更新されない可能性がある点に留意が必要。

原因切り分けとして、各変数の値を一時的に出力して検証することを推奨。例:end_time、now_time、time_lagの有無と数値、意図通りかの確認。

「値が出ない」のか「値は出るが意図外」なのかで問題箇所を特定する方針。

具体的な修正コードや確定解は未提示。議論は継続中で、追加の出力確認と状況の具体化が次アクション。

Summarized with AI on February 6. AI used: gpt-5.

メタフィールドで販売終了時刻を設定しました。

商品ページでは販売終了時刻になったら「カートに追加」ボタンを押せなくするように設定ができましたが、該当の商品がカートに入っていた時に購入ができてしまうため、カート画面でも購入ボタンを押せなくするよう設定をしたいです。

以下のコードを書いてみましたがうまく反映されませんでした。

for文が間違っているのでしょうか?

どなたかご教示いただけますと幸いです。

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

{% for item in cart.items %}
  {% for metafield in item.product.metafields.custom.end_time %}
   {% assign end_time = product.metafields.custom.end_time | date: "%s" %}  
   {% assign now_time = "now" | date: "%s" %} 
   {% assign time_lag = now_time | minus: end_time %} 
   {%  if  end_time != blank and time_lag >= 0 %}
    {% assign typeZ = true %}
   {% endif %}
  {%- endfor -%}
{%- endfor -%}

{%- if typeZ == true -%}
  <button disabled>
        購入できません
  </button>
{%- else -%}
  <button type="submit" id="checkout" class="cart__checkout-button button update" name="checkout"{% if cart == empty %} disabled{% endif %} form="cart">
        {{ 'sections.cart.checkout' | t }}
  </button>
{%- endif -%}

https://shopify.dev/api/liquid/filters#date-the-current-date

Note> The timestamp will reflect the time that the Liquid was last rendered. Because of this, the timestamp might not be updated for every page view, depending on the context and caching.

上記の内容を把握されているという前提で、一般的な内容ではありますが以下記載します。

うまく反映されないというのが具体的にどういう状況なのかわかりませんが、各部の値を出力して確認されることをお勧めします。

「値が出力されない」「値は出力されるが意図した値ではない」などの結果から問題箇所が特定できるかなと思いますので。