配送日ピッカーは日付を表示します。検証は、その日付を守らせます。 Shopify での検証とは、カートおよびチェックアウト検証 Function のことです。支払いの前に Shopify のサーバー上で動き、日付がない、休業日、満枠のいずれかなら注文を止めます。Shopify のどのプランでも、Shop Pay、Apple Pay、Buy it now を含むチェックアウトへのどの経路でも動きます。Plus が必要なのは、チェックアウトページの中に表示するピッカーだけです。
ピッカーだけでは不正な日付が通ってしまう理由
商品ページやカートページのピッカーは、表示にすぎません。お客様のブラウザー上で、休業日と満枠の日付をグレーアウトするだけです。次のような場合、有効な日付がないままでも注文は通ります。
- お客様がエクスプレスボタンを使った。 商品ページの Buy it now、Shop Pay、Apple Pay、Google Pay はそのままチェックアウトへ進むので、カートのピッカーは一度も動きません。Buy It Now は配送日を飛ばしますをご覧ください。
- 支払っている間に日付が埋まった。 ページを開いた時点では、ピッカーに「残り 1」と出ていました。その枠を別の人が取りました。
- カートが昨日のものだった。 日付を選んだあと、締め切りを過ぎてから戻ってチェックアウトしました。
- カートドロワーにピッカーが表示されない。 あるいは、テーマが変わってピッカーのブロックがなくなりました。
- カートの配送日が、手作業やスクリプトで書き換えられた。
Shopify 標準の無料の方法、つまりテーマのコードでカートページに日付ピッカーを足す方法にも、同じ穴があります。日付は集めますが、チェックアウトでは何もチェックしません。
配送日の検証が行うべきチェック
OrderRules がチェックアウトで行うチェックと、お客様に表示されるデフォルトのメッセージです。
| チェック | 防げるもの | デフォルトのメッセージ |
|---|---|---|
| 日付が必須 | 日付がまったくない。Buy it now や Shop Pay でよく起きる | ご注文の前にお届け日を選択してください。 |
| 日付が有効 | 過去の日付、リードタイム内や締め切り後の日付、配送しない曜日、予約できる期間より先の日付 | 選択されたお届け日はご利用いただけなくなりました。別の日付をお選びください。 |
| 休業日 | 祝日などの配送休業日 | 選択された日付は配達を行っておりません。別の日付をお選びください。 |
| 日が満枠 | その日付が、お届け日ごとの最大注文数に達している | {date} の配達は満枠です。別の日付をお選びください。 |
| 時間帯 | 時間帯が未選択、または時間帯が満枠 | 配達時間帯を選択してください。/ 選択された配達時間帯は満枠です。別の時間帯をお選びください。 |
| 日付ごとの商品上限 | その日付に残っている数を超える商品数 | Only {n} left for delivery on {date}. Please reduce the quantity or choose another date. |
| 受け取り方法 | 店舗受け取り限定の商品と配送限定の商品の混在、または誤った受け取り方法 | カート内の商品は受け取り方法が異なるため、同時にご購入いただけません。 |
| 店舗受け取り | 受け取り日、店舗、時間帯が未選択。休業日や満枠の受け取り日・時間帯 | ご注文の前に受け取り日を選択してください。(ほかに 5 件) |
アプリのチェックアウトでのチェックが最初の行だけだと、日付なしの注文は止められても、予約超過は止められません。
Shopify で検証を入れる 3 つの方法
1. 自分で検証 Function を作る。 開発者が、カートの配送日を読み取り、許可されていなければエラーを返す、カートおよびチェックアウト検証 Function を書きます。どのプランでも動きます。Function は実行中にデータベースを参照できないので、許可する日付と予約済みの数を、あらかじめメタフィールドに書き込み、最新に保つ必要があります。作業の大半はそこです。仕組みは、Shopify の検証 Functions の解説で扱っています。
2. チェックアウト検証付きの配送日ピッカーアプリを使う。 インストールする前に、5 つ確認しましょう。
- カートおよびチェックアウト検証 Function を使っているか、それともテーマの JavaScript だけか。
- Buy it now、Shop Pay、Apple Pay で日付のない注文を止められるか。
- チェックは、Shopify のどのプランで動くか。
- 満枠の日付や時間帯を、ピッカーで隠すだけでなく、チェックアウトでも再チェックするか。
- 販売するすべての言語で、メッセージを編集できるか。
配送日ピッカーアプリの比較で、チェックアウトで強制するアプリと、表示だけのアプリを示しています。
3. Shopify Plus なら、ピッカーをチェックアウトの中に置く。 チェックアウト UI 拡張が、チェックアウトページにカレンダーを表示するので、エクスプレスで購入するお客様にも見えます。ただし、これも表示にすぎません。検証 Function と組み合わせないと、日付が飛ばされたり、古い日付が残ったりします。
OrderRules で設定する
- Advanced プランで、利用可否ルールを開き、チェックアウトで配送日を必須にする をオンにします(時間帯を使うなら 時間帯を必須にする もオン)。
- Shopify で 設定 → チェックアウト を開き、チェックアウトルール までスクロールして、OrderRules のルールがオンか確認します。
- 検証がチェックする内容を設定します。お届け日ごとの最大注文数、各時間帯の 1日あたり上限、配達日 で集計する商品の制限、配送休業日です。
- チェックアウトメッセージ で、メッセージを編集するか、言語パックを適用します。
- 日付なし、休業日、満枠の日付で、カート、Buy it now、Shop Pay の各経路からテストします。最初に試すなら、開発ストアがいちばん安全です。
検証でも防げないこと
- 同じ秒に完了する 2 件のチェックアウトは、最後の 1 枠に対して両方が通ることがあります。検証は予約済みの分を読み取るだけで、ロックはかけません。
- 締め切り直後は、アプリが許可する日付の一覧を更新するまでの短い間、日付がチェックアウトを通ることがあります。ページ上のピッカーからは、その日付がすぐに消えます。
- チェックアウトを経由しない注文はチェックされません。Shopify POS、サブスクリプションの更新、管理画面で作成して支払い済みにした注文、ほかのアプリや Admin API からの注文です。これらも上限にはカウントされます。
- 購入後の変更。 Shopify の管理画面で注文の日付を変更しても、チェックされず、枠も移動しません。
- 郵便番号とゾーン。 OrderRules は住所をチェックしません。あるエリアへの配送をやめるなら、そのエリアを Shopify の配送ゾーンから外してください。
詳しくは、互換性と既知の制限をご覧ください。