現在、shopify Appストアにあるアプリに依存せずに**購入制限機能(バリアント単位)**を実装しようと試みています。
考えていた実装としては:
・Metafileds GuruやMatrixify等を使って、バリアントに対して購入制限用のメタフィールドをセットする。
・カートモーダル内で、StoreFront APIからカート内にある各バリアントの購入制限メタフィールドを取得し、実際のカート内の数と比較するバリデーションを実装。(JS)
・超過している場合は、チェックアウトへ進むボタンの無効化。(JS)
といった流れです。
※バリアントメタフィールドは、Storefront APIから取得できるよう、設定済みです。
しかし、先日のアップデートを受け、新機能であるShopify functionのCart and Checkout Validationを使えば、バリデーションの部分をJSで独自実装せずにできないか?と考えているのですが、現在は引き続きcheckout.liquidを利用しており、checkout extensionsに移行できておらず、検証に時間を要するため質問させていただきました。
知見のある方がおりましたら、ご回答のほどよろしくおねがします。
結論から言いますと、バリデーション部分をCart and Checkout Validation APIを使うことで実現することは可能だと思います。
念のため補足しますと、現状こちらのAPIはカスタムアプリの場合、Shopify Plusのみ利用可能です。
(checkout.liquidをご利用されているということですので、問題ないと思いますが)
https://shopify.dev/docs/api/functions/reference/cart-checkout-validation#shopify-plans
また、購入制限メタフィールドというのが、number_decimalタイプを想定されているのであれば、問題ありませんが、metaobject_referenceタイプの利用はおすすめしません。
Shopify FunctionsのMetafield取得の仕様が現状はStringでしか返ってこず、参照型の場合は紐づくオブジェクトのIDのみ取得されるため。
ご回答、ありがとうございます!
Cart and Checkout Validation APIを利用することを視野に、checkout.liquidからの移行を行い、より詳しい検証をしていきたいと思います。
購入制限メタフィールドに関しては、バリアントに対してIntegerタイプの{namespace}.{key}メタフィールドを設定し、その値を取得する形で実装しようと思っております。(metaobject_referenceタイプではないと認識しておりますが、間違っていればご指摘いただけますと幸いです。)
今回は、実装の可否を知りたかったので、ベストソリューションとさせていただきます。
ありがとうございました!