アプリを使わずに一部の商品だけ会員限定+個数制限がある商品を作りたい

Topic summary

目的: アプリなしで特定商品のみを会員限定にし、追加時に個数制限を適用(テーマ: Dawn 4.0.0)。

会員限定の実装: Liquidの{% if customer %}で会員判定し、会員には購入UIを表示、非会員には会員限定の案内と登録誘導を表示。

個数制限(カート時): JSで「カートに追加」を一旦止め、カート内の当該商品の数量と追加予定数を合算。上限以内なら追加、超過時はポップアップで通知。

迂回対策: チェックアウトでカートがリセットされるため分割購入での回避が可能。会員限定を前提に、Liquidのcustomer.ordersで当該商品の累計購入数を取得し、JS側に渡して上限判定に含める。

実装注意: JSへ渡す購入済み数(purchased_number)は必ず整数。空値は0にする。JSへの受け渡し手段(data属性やスクリプト変数)は方針提示のみで具体コードは未提示。

現状: 回答は実装フローと設計指針を提示。質問者は有用と評価。最終的なコード実装と検証は未了で議論は実質オープン。

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

表題の通り、アプリを使わずに指定した商品のみ会員限定かつ個数制限がある商品を作りたいと考えています。管理画面から会員限定にすることは可能ですが、全ての商品会員限定になってしまいます。

テーマDawn4.0.0をカスタマイズして作成しています。

購入制限はカートに入れる際に上限個数をオーバーする場合にのみポップアップを表示させたいと考えいてます。

カートに入っている商品の個数を引っ張ってきて条件分岐すれば意外と簡単にできるのかなぁとも思っているのですが情報を持ってくることはできても、どのような条件分岐で記述したらいいの分かりません。

アドバイス頂けますと幸いです。

部分的な回答になってしまいますが、ご容赦ください。

まず、アプリを使わずに、会員にだけ販売したい、という部分ですが、

{% if customer %} ... {% endif %}

で、会員だけの処理・表示を作ることができます。

ですので、下記のようにされてはいかがでしょうか?

{% if customer %}
    {% comment %}
    会員の場合の処理: カートに追加ボタンや購入ボタンを表示する
    {% endcomment %}
{% else %}
    {% comment %}
    会員ではない場合の処理: 会員限定であることを伝え、会員登録を促す内容を表示する
    {% endcomment %}
{% endif %}

次に、購入制限についてですが、

下記のようなフローを組んでみてはいかがでしょうか?

  1. ユーザーが「カートに追加」ボタンをクリック時、「カートに追加」する処理を止めて、以下の処理を行う。
  2. 数量制限商品が何個カート投入されているかを取得する
  3. その数と、今回カートに追加しようとしている数を、足し合わせた結果が、制限個数内であれば、「カートに追加」する処理を走らせる。
  4. そうでなければ、ポップアップを表示し、「お一人様何個までしか購入できない」ことを伝える。

しかし、この方法ですと、一度チェックアウトをしてしまうと、カートもリセットされるので、

1つずつ購入していくと、結局、何個でも購入できてしまいそうです。

今回は、会員限定ということで、

customer.ordersが使用できます。

https://shopify.dev/api/liquid/objects/customer#customer-orders

こちらで、当該商品をすでにいくつ購入しているかを取得すると良いかと思います。

しかし、「カートに追加」する時の処理はJavaScriptで、

すでに、いくつ購入しているかを数え上げるのはliquidになりますので、

どうにかして、JavaScriptに、購入済み個数を伝える必要があります。


※purchased_numberがliquidで数え上げた購入済み個数です。

※purchased_numberは必ず整数になるようにします。空の値になるとJavaScriptエラーになりますので、空の場合は、0を代入すると良いでしょう。

以上です。

大雑把な流れだけの説明になりますが、

参考になれば幸いです。

(キュー田辺)

1 Like

めちゃくちゃ参考になりました!ご回答ありがとうございます