
WC 11.0の注文アイテム削除アクションタイミング変更と開発者対応
WooCommerce 11.0.0のリリースに伴い、注文アイテム削除時のアクションフック woocommerce_removed_order_items の発火タイミングが大きく変わった。これまでは削除メソッド内で即座にデータベースからアイテムを消した直後にフックが走っていたが、今後は save() が呼ばれるタイミングまで遅延される。
この変更の本質は、注文復元フローで発生し得る「行アイテム消失」バグの修正だ。決済中断後の再開処理で、意図せず注文明細が空になる問題がこれで解消される。ただし、従来のタイミングを前提にした拡張機能やカスタムコードは、コールバックの変更が必要になる可能性がある。
この記事では、変更の背景、具体的な動作の差、そして開発者が取るべき対応策を整理する。内部的で動作確認用のフックに依存している開発者は特に注意が必要だ。
WooCommerce 11.0の注文アイテム削除フックに何が起きたのか

WooCommerceのコアクラス WC_Abstract_Order には、注文アイテムをまとめて削除する remove_order_items() メソッドがある。このメソッドは、チェックアウト時に注文内容を再構築する場面などで内部的に呼ばれる。
10.9系以前では、remove_order_items() が呼ばれるとすぐにデータベースから該当のアイテム行が削除され、その直後に woocommerce_removed_order_items アクションが発火していた。いわば「削除してからお知らせ」の流れだ。
11.0.0からは、アイテムのデータベース削除そのものは save() が呼ばれるまで引き延ばされる。そして woocommerce_removed_order_items アクションは、実際に削除がコミットされた直後の save_items() 内で発火するようになった。すぐに消さず、「保存のタイミングで消して知らせる」形へと変更されたわけだ。
この図のように、preフック(woocommerce_remove_order_items)の位置は変わっていない。変更されたのはpostフックのほうだけで、発火の場所が remove_order_items() の中から save_items() へと移動した。
なぜ削除の遅延が必要だったのか

変更の直接のきっかけは、チェックアウト時の注文再開フローで発生していたバグだ。WooCommerceの内部では、決済途中で何らかのエラーや中断が起きた場合、同じ注文データを使って再開を試みる仕組みがある。
10.9以前の処理は次のような流れだった。まず remove_order_items() で既存のアイテムをデータベースから削除し、その後に新しい内容を再構築して save() で保存する。ところが、削除と再構築の間に何らかの例外が発生したり、決済ゲートウェイが二重チェックアウトをトリガーしたりすると、新しいアイテムが書き込まれないまま保存処理に進んでしまうケースがあった。
その結果、合計金額は正しいのに注文明細が空になるという不整合が発生していた。管理者や店舗スタッフから見ると「注文はあるのに何を買ったのかわからない」状態で、商売上の大きな問題だ。
そこで11.0.0では、データベースからの削除を save() のタイミングまで遅延させる設計に変更された。これにより、再構築の途中で何か問題が起きても、直前の正しい注文内容がデータベース上に残っている。中断したら元のまま、成功したら新しい内容で上書きされる。再開フロー全体が原子的になるわけだ。
preフックの woocommerce_remove_order_items は引き続き remove_order_items() の先頭で同期的に発火する。postフックだけが「保存時に遅延」される形になる。両方のフックを組み合わせて使っているコードだけが影響を受ける可能性がある。
開発者が影響を受ける具体的なパターン

今回の変更は、あらゆる拡張機能に一律で影響するわけではない。影響を受けるかどうかは、フックの使い方によって明確に切り分けられる。
影響を受けるケース
次のようなコードが該当する。
woocommerce_removed_order_itemsにコールバックを追加し、その中で「アイテムはもうデータベースに存在しない」という前提で処理を行っているwoocommerce_remove_order_items(pre)とwoocommerce_removed_order_items(post)のペアで一連の操作を挟み込んでいるremove_order_items()が戻った直後に「データベースからアイテム行が消えている」と期待している
要するに、postフックが「同じコールスタック内ですぐ実行される」という暗黙の前提に依存しているコードは、動作が変わる可能性が高い。
影響を受けないケース
一方、次のような使い方をしている場合は問題ない。
- 最終的な保存済みの注文状態だけを監視する目的でpostフックを使っている
- コールバック内で、DB削除がコミットされた後の最終状態だけを参照している
- WooCommerceコア自体にはこのフックの利用箇所はないため、標準機能への影響はゼロ
postフックは変わらず「データベース削除の完了後」に発火するため、単純に「削除が終わったことを検知したい」だけのコードはそのまま動く。
開発者が今すぐ取るべき具体的な対応

コールバックの動作確認と修正
影響を受ける可能性のあるコードを発見したら、まず次の3点を確認してほしい。
remove_order_items()が戻った直後にデータベースのアイテム削除を前提にしている場合は、削除を期待する処理の前に明示的に$order->save()を呼ぶ- preフックとpostフックをペアで使っている場合は、postフックのロジックを注文の保存後に実行するように再構成する
- 動作確認はWooCommerce 11.0.0以降の環境で必ず実施する
コールバックが単に「削除後の状態を見たい」だけなら、特に対応は不要だ。postフックは依然としてDB削除のコミット後に発火するため、観測できる最終状態に違いはない。
save() を明示的に呼ぶことの意味
11.0.0以降のバージョンでは、remove_order_items() を呼んだだけではデータベースへの変更は一切発生しない。あくまでオブジェクトの内部状態が変わるだけだ。データベースへの反映は後続の save() でまとめて行われる。
つまり、「アイテムが消えた状態の注文をデータベース上で確定させたい」のであれば、プログラムの流れの中で明示的に $order->save() を実行する必要がある。これは今回の変更を正しく扱う上で最も重要なポイントだ。
この変更がもたらす開発者体験への影響

一見すると「動いていたコードが壊れるのか」と不安に思うかもしれないが、この変更の根底にはコードの安全性を高めるという明確な意図がある。削除と保存を分離することで、中途半端な状態に陥る可能性を根本から断ち切っている。
WooCommerceの内部設計に詳しい開発者であれば、データベース操作の遅延実行はむしろ現代的なパターンだと感じるだろう。トランザクション的な一貫性を重視する設計は、拡張機能の品質向上にもつながる。
影響範囲が限定的であることも安心材料だ。WooCommerceコア自身はこのフックを消費しておらず、実質的にはサードパーティ製のプラグインやテーマだけが該当する。大半のショップ運営者は特に意識することなくアップデートできる。
この記事のポイント
- WooCommerce 11.0.0で
woocommerce_removed_order_itemsフックの発火タイミングがsave()実行時へ変更された - preフックの
woocommerce_remove_order_itemsは変わらず同期的に動作する - 変更の目的は注文再開時の行アイテム消失バグの修正で、削除処理を遅延させることで安全なフローを実現
- postフックが「削除直後に走る」ことを前提にしたコードのみが影響を受ける可能性がある
remove_order_items()の直後にDB反映を期待するなら明示的にsave()を呼ぶこと

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

WooCommerce 11.0で失敗注文の在庫が自動復元へ、変更点と対応を解説
WooCommerce 11.0で、注文が「失敗」ステータスに移行した際の在庫処理に変更が入った。従来、注文が在庫を減らした後に「失敗」になると在庫が戻らなかったが、今後は自動で在庫が復元されるようになる。
この変更はほとんどのストアにとっては歓迎すべき改善だが、一部のカスタムフローでは注意が必要だ。ここでは変更の具体的な内容と、開発者が取るべき対応を整理する。
具体的に何が変わったのか

この変更の核心はシンプルだ。WooCommerce 11.0以降、注文ステータスが「失敗(failed)」に移行したとき、その注文が以前に在庫を減らしていた場合、自動的に在庫が復元されるようになる。
技術的には、woocommerce_order_status_failedフックにwc_maybe_increase_stock_levels()関数が登録された。この関数は、注文が以前に在庫を減らしていたかどうかを確認した上で在庫を戻す処理を行う。
上記の図で示したように、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最適化の豊富な経験

WordPress 7.0最新情報!開発者向けアップデートとAI連携機能の全容
WordPress 7.0のリリースサイクルに大きな動きがあった。当初の予定を変更し、リアルタイム共同編集(RTC)の基盤を強化するためにスケジュールが延長されたのだ。
2026年3月31日の発表によると、パフォーマンス上の課題を解決するためにアーキテクチャの根本的な見直しが必要になったという。これは数百万のサイトに影響を与える重要な決断だ。
本記事では、WordPress 7.0で導入される革新的なAI連携機能や、開発者が知っておくべきシステム要件の変更、そして進化したエディタの最新機能について詳しく解説する。
WordPress 7.0のリリーススケジュールとシステム要件の変更

WordPress 7.0のリリースに向けた開発は、現在一時的な調整局面にある。リリース候補(RC)版から再びベータ版の状態へ戻るという、異例の事態となっているのだ。
プレリリース版の更新は4月17日まで一時停止される。新しい正式なスケジュールは4月22日までに発表される予定だ。この延期は、目玉機能であるリアルタイム共同編集の品質を担保するための前向きな判断とされている。
PHP 7.4以上が必須要件に
システム要件についても重要な変更がある。WordPress 7.0からは、PHP 7.2および7.3のサポートが完全に終了する。これにより、動作に必要な最低バージョンはPHP 7.4へと引き上げられる。
開発チームはPHP 8.2以降の使用を強く推奨している。古い環境で運用を続けているサイト管理者は、アップデートが配信される前にサーバー環境の更新を済ませておく必要があるだろう。これはセキュリティとパフォーマンスの両面で不可欠な対応だ。
開発スケジュール延期の背景
スケジュールの延長が必要になった最大の理由は、リアルタイム共同編集(RTC)のデータ保存方式だ。現在の実装では、データの同期に特定の投稿タイプを使用しているが、これがキャッシュの効率を著しく低下させることが判明した。
この問題を解決するため、コラボレーションデータ専用のデータベーステーブルを新設する作業が進められている。大規模なサイトや同時編集が多い環境でも、安定した動作を実現するための基盤作りが優先された形だ。
リアルタイム共同編集(RTC)の進化と開発者への影響

WordPress 7.0の看板機能であるリアルタイム共同編集は、複数のユーザーが同じ投稿を同時に編集できる仕組みだ。これには「Yjs」という高度なデータ同期エンジンが採用されている。
Yjsは「CRDT(競合解消共有データ型)」と呼ばれるアルゴリズムの一種だ。これにより、異なるユーザーによる編集が衝突することなく、スムーズに統合される。通信方式には、多くのホスティング環境で動作するHTTPポーリングが標準で選ばれた。
他ユーザーの選択範囲が可視化
最新のアップデートでは、他の編集者がどのテキストを選択しているかがリアルタイムで表示されるようになった。これまではカーソルの位置のみが表示されていたが、選択範囲も色付きでハイライトされる。
この挙動はGoogleドキュメントなどの共同編集ツールに近い体験を提供する。また、編集者のアバター表示が刷新され、接続が不安定な際の切断判定も改善されるなど、ユーザーインターフェースの安定性が向上している。
クラシックなメタボックスの制限
プラグイン開発者にとって注意すべき点は、従来の add_meta_box() を使ったメタボックスが残っている投稿では、共同編集モードが自動的に無効化されることだ。
共同編集機能を活用するためには、メタボックスをブロックエディタのサイドバーコンポーネントへ移行する必要がある。具体的には register_post_meta() と PluginSidebar コンポーネントを組み合わせる手法が推奨されている。既存プラグインの対応が急務となるだろう。
標準AI機能「AI Client」と「Connectors API」の導入

WordPress 7.0では、AIサービスとの連携を標準化するための新しいAPI群が導入される。これにより、WordPress本体やプラグインがAI機能をより簡単に利用できるようになる。
これまでは各プラグインが個別にOpenAIやGoogleのAPIを実装していた。新機能の「WP AI Client」は、これらの外部サービスとの通信を抽象化するライブラリだ。開発者は特定のプロバイダーに依存しないコードを書くことが可能になる。
Connectors APIによる柔軟なプロバイダー選択
AIの接続情報を一括管理するのが「Connectors API」だ。管理画面に新設される「Connectors」ページから、サイトで使用するAIプロバイダーを設定できるようになる。これは、AIの資格情報(APIキーなど)を安全に保存するためのプラットフォーム基盤だ。
OpenAI、Google、Anthropic向けの公式プロバイダープラグインが用意されるほか、OpenRouterやOllamaといったコミュニティ製の接続ツールも登場している。サイト管理者は、用途に応じて好みのAIモデルを自由に切り替えられるようになる。
クライアントサイドAbilities APIの追加
権限管理の仕組みも進化する。WordPress 6.9でPHP側に導入された「Abilities API」のJavaScript版が7.0で搭載される。これは、ブラウザ上で動作するスクリプトが、現在のユーザーにどのような操作が許可されているかを簡単に確認できる仕組みだ。
REST APIを通じてサーバー側の権限設定を自動で取得するため、フロントエンドでの複雑な権限チェックコードが不要になる。これは、ブラウザ上で動作するAIエージェントなどが、WordPressの操作を安全に行うための布石とも言える重要なアップデートだ。
ブロックエディタとデザイン機能の最新アップデート

エディタの使い勝手を向上させる多くの改善が盛り込まれている。特に、デザインのカスタマイズ性が大幅に強化された点が目立つ。CSSを直接書かなくても、高度なスタイリングが可能になる。
例えば、ボタンブロックの「ホバー」「フォーカス」「アクティブ」といった状態別のスタイルが、管理画面のグローバルスタイルから直接編集できるようになった。これにより、テーマ独自のCSSを追加する手間が軽減される。
ビューポート別のブロック表示制御
WordPress 7.0では、デバイスの種類(PC、タブレット、モバイル)に応じてブロックの表示・非表示を切り替える機能が拡張される。これはCSSのメディアクエリを利用して実装されている。
この機能のポイントは、DOM(HTML要素)を削除するのではなく、表示設定を制御している点だ。開発者が独自のブロックでこの機能をサポートする場合、メタデータの扱いに注意が必要だが、ユーザーにとっては直感的なレスポンシブデザインの調整が可能になる。
このデモは、デバイス設定によってブロックがどのように見えるかを視覚化したものだ。
背景画像とグラデーションの重ね合わせ
デザイン面では、背景画像の上にグラデーションを重ねる機能も追加された。これまではカスタムCSSが必要だったが、ブロックのコントロールパネルから直接設定できるようになる。
テキストの読みやすさを確保するためのオーバーレイや、装飾的な効果をエディタ上で即座に確認できる。カバーブロックだけでなく、背景サポートを登録している全てのブロックで利用可能だ。Webデザインの表現力がさらに広がるだろう。
開発ツールとPlaygroundの劇的な進化

開発者向けのツールチェーンも大きな転換期を迎えている。特にビルドツールの高速化と、AIを活用した開発手法の導入が注目される。
新しいビルドツール @wordpress/build は、従来のwebpackとBabelのパイプラインを、esbuildベースのエンジンに置き換える。これにより、ビルド時間が劇的に短縮される。既存の @wordpress/scripts からの移行も容易に設計されている。
WordPress Playground MCPサーバーの登場
ブラウザ上でWordPressを動かす「Playground」に、MCP(Model Context Protocol)サーバー機能が追加された。これは、AIエージェントがWordPress環境を直接操作するための仕組みだ。
Claude CodeやGeminiといったAIツールと連携させることで、AIがローカルのPlaygroundインスタンスに対してファイルを書き込んだり、PHPを実行したりできるようになる。会話を通じてプラグインの雛形を作成し、その場でテストまで完了させるといった新しい開発体験が可能になる。
コマンドパレットの整理と機能追加
管理画面の操作を素早く行うためのコマンドパレットも使いやすく改良された。コマンドが論理的なグループ(セクション)に分けられ、最近使用したコマンドが上位に表示されるようになった。
プラグイン開発者が独自のコマンドを登録する際も、適切なセクションに配置されるため、ユーザーが見つけやすくなる。細かい改善だが、日々の管理作業の効率を確実に向上させるアップデートだ。
この記事のポイント
- WordPress 7.0は共同編集機能の改善のためリリースが延期され、4月22日までに新日程が発表される。
- PHP 7.4以上が必須要件となり、古い環境のサイトはアップデート前にサーバー更新が必要。
- 標準AI機能「AI Client」と「Connectors API」により、外部AIサービスとの連携が容易になる。
- リアルタイム共同編集(RTC)では他ユーザーの選択範囲が可視化され、より直感的な操作が可能。
- ボタンの状態別スタイルや、デバイス別の表示制御がグローバルスタイルから設定可能になった。
- WordPress PlaygroundがAIエージェントと連携し、AIによるサイト構築やテストが加速する。

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