ユーザーがその商品を購入した事があるか、で分岐するLiquidを書きたい。

Topic summary

特定の商品ページで、ユーザーがその商品を過去に購入したかどうかで表示を分岐させたいという質問。

質問者の要望:

  • 購入済みユーザーには「あなたはこの商品を購入したことがあります」
  • 未購入ユーザーには「まだこの商品を買ったことがありません」
  • 会員機能はOFF、非会員も含めた全ユーザーが対象
  • LocalStorageやCookieの使用も検討中

回答内容:

  • Liquidのみでの実装は困難
  • ただし「直近20注文以内での購入有無」による分岐は可能
  • 実装方法として、Liquidのcustomerオブジェクトからordersを取得(最大20件)し、各注文のline_items内のproduct_idを現在の商品IDと照合することで判定できる

現状:
質問者が20件という取得制限の理由について追加質問中。完全な解決には至っておらず、議論は継続中。

Summarized with AI on November 7. AI used: claude-sonnet-4-5-20250929.

特定の商品ページを見ている時、

その商品を購入したことがあるユーザーの場合は

「あなたはこの商品を購入したことがあります」

と表示。

未購入のユーザーの場合は

「まだこの商品を買ったことがありません」

と表示

のように分岐させたいです。

このようなことはLiquidで可能なのでしょうか。

LocalStrageやCockieは使用しない想定です。

また、ストアの「会員機能」はOFFにしており、

基本的には「購入者は総じてストア非会員である」という状況だと仮定します。

参考コード例などをいただけると非常に助かりますが、

有識者の方より「私の知る限り不可能」等のお考えを

いただけるのみでも大変参考になります。

ご助言いただけますと幸いです。

結論から申し上げますと、Liquid のみでの実装はかなり厳しいかと思います。

しかし、「直近の 20 注文以内で顧客該当の商品を購入したかどうか」での出しわけを行うことができます。

以下に、「直近の 20 注文以内で顧客該当の商品を購入したかどうか」での出しわけの実装方針をまとめます。

customer

https://shopify.dev/docs/api/liquid/objects/customer

orders

https://shopify.dev/docs/api/liquid/objects/order

line_item

https://shopify.dev/docs/api/liquid/objects/line_item

  1. 上記の Liquid の customer オブジェクトより、orders を取得(一度に取得できる個数が 20個まで)する
  2. orders の line_items の product_id を確認して、現在の商品(product.id で取得できます)と一致するものがあるかどうかを確認する

上記の方法で、「直近の 20 注文以内で顧客該当の商品を購入したかどうか」の true・false を取得できるので、

こちらを用いて表示の分岐を行う形になるかと思います。

丁寧なご回答ありがとうございます。

orders を取得(一度に取得できる個数が 20個まで)

が制限の理由なんですね。

頂いた情報を基にチャレンジしてみます。

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