WooCommerce 11.0で失敗注文の在庫が自動復元へ、変更点と対応を解説

WooCommerce 11.0で失敗注文の在庫が自動復元へ、変更点と対応を解説

WooCommerce 11.0で失敗注文の在庫が自動復元へ、変更点と対応を解説

WooCommerce 11.0で、注文が「失敗」ステータスに移行した際の在庫処理に変更が入った。従来、注文が在庫を減らした後に「失敗」になると在庫が戻らなかったが、今後は自動で在庫が復元されるようになる。

この変更はほとんどのストアにとっては歓迎すべき改善だが、一部のカスタムフローでは注意が必要だ。ここでは変更の具体的な内容と、開発者が取るべき対応を整理する。

具体的に何が変わったのか

具体的に何が変わったのか

この変更の核心はシンプルだ。WooCommerce 11.0以降、注文ステータスが「失敗(failed)」に移行したとき、その注文が以前に在庫を減らしていた場合、自動的に在庫が復元されるようになる。

技術的には、woocommerce_order_status_failedフックにwc_maybe_increase_stock_levels()関数が登録された。この関数は、注文が以前に在庫を減らしていたかどうかを確認した上で在庫を戻す処理を行う。

WooCommerce 11.0 より前の挙動
保留中 在庫を減らす 失敗 → 在庫は戻らない
保留中 在庫を減らす キャンセル → 在庫が復元される
失敗は在庫復元の対象外だった
WooCommerce 11.0 以降の挙動
保留中 在庫を減らす 失敗 → 在庫が復元される
保留中 在庫を減らす キャンセル → 在庫が復元される(従来通り)
失敗も在庫復元の対象に追加

上記の図で示したように、WooCommerce 11.0では「失敗(failed)」がキャンセルや保留中と同様に在庫復元の対象へと引き上げられた。

なぜこの変更が必要だったのか

この問題は非同期決済で顕在化しやすかった。たとえば、顧客が支払いを開始すると注文は「保留中(on-hold)」に移行し、その時点で在庫が減る。しかし、何らかの理由で決済が拒否され、注文が「失敗(failed)」になると、在庫だけが減ったまま戻らなかった。

結果として、実際には販売できていないにもかかわらず、在庫数だけが減った状態が続いていた。特に在庫が1点ものの商品を扱うストアでは、実害の大きい挙動だったと言える。今回の変更で、このギャップが解消される。

在庫の二重減算は起こらないのか

wc_maybe_increase_stock_levels()関数は、注文が実際に在庫を減らしたかどうかをフラグで確認してから在庫を戻す。そのため、在庫を減らしていない注文が「失敗」になった場合には在庫は変動しない。

また、管理者や拡張機能が「失敗」から再度「支払い済み」などのステータスに戻した場合、WooCommerceは以前の履歴を参照して二重に在庫を減らすことはないよう設計されている。

この変更はチェックアウト時の在庫予約機能には影響しない。あくまで在庫を実際に減らした注文が対象だ。

どのようなストアや拡張機能が影響を受けるか

どのようなストアや拡張機能が影響を受けるか

大多数のストアや拡張機能にとっては、今回の変更はそのまま歓迎すべき改善だ。決済失敗時に在庫が正しく戻るようになることで、手動での在庫修正が不要になる。

しかし、一部のカスタムフローでは注意が必要だ。具体的には、「失敗(failed)」ステータスを支払い以外の目的で流用しているケースである。たとえば、配送失敗時に注文を「失敗」としてマークしつつ、商品はすでに発送済みで在庫を確保しておきたい、といったフローだ。

こうしたストアでは、WooCommerce 11.0にアップデートすると、注文が「失敗」に移行した瞬間に在庫が復元されてしまい、意図しない在庫の増加が発生する。

開発者が取るべき対応

開発者が取るべき対応

基本的には対応不要

まず前提として、決済の失敗にのみ「失敗」ステータスを使っているストアや拡張機能では、何も対応する必要はない。アップデート後、自動的に在庫が正しく処理される。

意図的に在庫を減らしたままにしたい場合

もし拡張機能やストアが「失敗」ステータスを支払い以外の目的で使用しており、在庫を減らしたままにしておく必要があるなら、以下のコードで新しい在庫復元フックを削除すればよい。

remove_action( 'woocommerce_order_status_failed', 'wc_maybe_increase_stock_levels' );

ただし、これはあくまで「旧来の挙動を維持する明確な理由がある場合」に限るべきだ。ほとんどのストアでは、在庫が自動で復元される新しい挙動のほうが望ましい。

アップデート前のテスト事項

アップデートを配信する前に、以下の項目を実環境に近いステージング環境でテストすることを強く推奨する。

  • 「保留中」→「失敗」のフローで在庫が正しく復元されること
  • 「失敗」→「処理中」→「完了」のフローで在庫が二重に減算されないこと
  • カスタムフローで「失敗」ステータスを使っている場合、在庫数と注文メモが意図した通りになっていること

特に、非同期決済を利用しているストアでは、「保留中」で在庫が減った後、決済拒否で「失敗」に移行した際の挙動を重点的に確認しておくと安心できる。

この記事のポイント

  • WooCommerce 11.0では、注文が「失敗(failed)」に移行した際に在庫が自動復元される
  • 従来は「キャンセル」「保留中」のみが復元対象で、「失敗」は対象外だった
  • ほとんどのストアは対応不要で、むしろ在庫管理が正確になるメリットがある
  • 「失敗」ステータスを支払い以外で流用しているストアは、フック削除で旧来の挙動に戻せる
  • アップデート前には必ずステージング環境で在庫の動きをテストすること
海田 洋祐

・ 複数業界における17年間のデジタルビジネス開発経験 ・ ウェブサイト開発のためのHTML、PHP、CSS、JavaScript等の実用的知識 ・ 15ヶ国語対応の多言語SaaSの開発経験 ・ 17年間にも及ぶ、Eコマース長期運営経験 ・ 幅広い業界でのSEO最適化の豊富な経験

メッセージを残す