WooCommerce を 11.1.0 に上げた直後からストアが HTTP 500 で落ちた、という報告が 9/5 に wp.org のフォーラムで 2 件並びました。1 件目は自動更新で上がった 4 秒後から、2 件目は別のサイトで同じ症状。開発元のサポートもクリーン環境で再現したと書いていたので、手元でも再現して確かめました。先に、やることだけ。
- 11.1.0 に上げる前に、
gettextフィルターのコールバックでis_wc_endpoint_url()を呼んでいないか見る - 呼んでいるなら、コールバックの先頭に
if ( ! did_action( 'wp' ) ) return $translated;を 1 行足す。それから上げる - すでに落ちているなら、FTP でそのスニペットの行を消すか、
wp --skip-themes plugin install https://downloads.wordpress.org/plugin/woocommerce.11.0.1.zip --forceで 11.0.1 に戻す
やることは、スニペットを 1 行直すだけ
上げる前にスニペットを直しておけば、11.1.0 に上げても落ちません。Docker に WordPress 7.1 と WooCommerce 11.0.1 を入れ、子テーマの functions.php に「マイアカウントの住所ページの文言だけ書き換える」スニペットを置いた状態から、書き方だけを変えて 11.1.0 に上げました。
add_filter( 'gettext', function ( $translated, $text, $domain ) {
if ( is_wc_endpoint_url( 'edit-address' ) && 'Billing address' === $text ) {
return 'ご請求先';
}
return $translated;
}, 20, 3 );
| スニペットの書き方 | 11.1.0 に上げた結果 |
|---|---|
| 上のまま | フロントもログイン画面も 500 |
先頭に if ( ! did_action( 'wp' ) ) return $translated; を足す | 全ページ 200 |
&& の左右を入れ替えて文字列の比較を先にする | 全ページ 200 |
どちらの直し方でも、11.1.0 のまま全ページ 200 で使えました。did_action( 'wp' ) のガードは、フォーラムで開発元のサポートが「11.1.0 のままで安全」と検証した形そのままです。
問題は直す前に上げてしまった場合で、そこからは打つ手が減ります。手元では管理画面もログイン画面も wp-cli も、同じように落ちました。
| 落ちた状態からやろうとしたこと | 結果 |
|---|---|
wp-admin/plugins.php を開く | HTTP 500 |
wp plugin install woocommerce.11.0.1.zip --force | メモリ枯渇で死ぬ |
wp --skip-themes plugin install woocommerce.11.0.1.zip --force | 通る。直後に全ページ 200 |
FTP で functions.php の該当行を消す | 通る |
もう 1 つ、メモリを増やしても直りません。上限を 256M から 1G にして同じページを開くと、落ちるまでの時間が 0.2 秒から 0.9 秒に延びただけで、結果は同じ 500 でした。2 件目の報告者も 1GB で枯渇したと書いていて、GitHub の issue #68401 には上限を上げても効かない理由が計測付きで載っています。
落ちるのは 2 つ揃ったサイトだけ
WooCommerce を使っていれば全滅、という話ではありません。スニペットの無い 11.1.0 はフロントもログイン画面も 200 のままでした。落ちるには 2 つ揃う必要があります。
- WooCommerce が 11.1.0
gettextフィルターのコールバックが、文字列を比べる前にis_wc_endpoint_url()を呼んでいる
2 つ目で分かれます。置き場所は子テーマでも mu-plugin でも同じで、WordPress の版も関係ありません。同じスニペットで WordPress 7.0.4 に落として測っても、同じように 500 でした。呼んでいるのが is_wc_endpoint_url() ではなく wc_get_account_endpoint_url() でも、実測では同じように 500 でした。
逆に、WooCommerce の文言を書き換える定番の形、is_admin() と $domain を見て switch ( $text ) で分岐するだけのものは、手元では 11.1.0 でも 200 のままでした。is_account_page() や is_cart() で絞る書き方も 200 のままです。コールバックの先頭に is_admin() があると症状が少し変わり、管理画面だけは開けました。フォーラムでも 1 件目は wp-cli まで死に、2 件目は管理画面に入れたと書かれていて、手元と同じ割れ方です。

原因は開発元のサポートが特定済み
原因は僕が読み解いたものではなく、フォーラムのスレッドで開発元のサポート(Mercury-a11n)が書いた解析があります。要約すると、11.1.0 で新設された「注文の撤回」機能の処理が、機能がオフでも WooCommerce のクエリ変数を返すフィルターに登録され、呼ばれるたびに機能の有効判定を走らせます。その判定が機能一覧の定義を組み立て、定義の文言を翻訳するたびに gettext が動きます。そこでスニペットが is_wc_endpoint_url() を呼ぶと同じフィルターに戻り、組み立て済みかを見るガードは組み立て中ずっと「空」と読まれるので、終わりません。クリーンな WordPress 7.1 / PHP 8.4 で測ると 11.1.0 は深さ 37,774 で 512M を使い切り、11.0.1 は深さ 1 だった、という計測も添えられています。
コードの該当箇所まで追いたい人は、GitHub の issue #68401 に出ています。
待ってもいいが、直せば上げられる
今すぐ手を入れられないなら、11.0.1 で待つこともできます。11.0.1 は 8/10 のセキュリティ修正版なので、11.1.0 から戻してもその修正は残ります。11.1.0 にはデータベースの更新がありますが、手元で 11.1.0 に上げて管理画面を開いただけでは走らず、データベースの版は 11.0.1 のままでした。11.0.1 に戻す選択は、フォーラムで開発元のサポートも「修正が出るまで 11.0.1 に留まる」と案内しています。
修正版がいつ出るかは分かりません。開発元のサポートは「約束できない」と書いていて、issue は 9/5 に起票されて担当者が付いた段階です。issue の中で根本の直し方として挙がっている PR は 1 月から開いたままなので、次の版で入る前提にはしない方が無難です。
とはいえ待つ必要もありません。上の 1 行を足すか順番を入れ替えるだけで、11.1.0 のまま全ページ 200 に戻ります。
直さずに当たった場合、WordPress の「重大なエラーが発生しました」の画面は出ません。返ってくるのは本文 0 バイトの HTTP 500 で、Chrome ではブラウザ側の「このページは動作していません」が表示されました。管理者宛の復旧メールも来ませんでした。

事前検査は止め、修正版を提案してきた
最後に僕らのサービスでも同じ状況を通しました。検証用の WordPress に WooCommerce 11.0.1 と子テーマのスニペットを入れて事前検査をかけると、複製した環境で 11.1.0 に上げた時点で検査対象の URL が落ち、更新は本番へ出ませんでした。

WP Rocket のときと違ったのはその先です。前回は落とした原因が WP Rocket 本体だったので手を出さずに「失敗」で止まりましたが、今回は原因が子テーマの functions.php だったので、AI がそこを書き換えた版で再検査を通し、修正案として出してきました。本番に入れるかは人が確認してから決める形で、押すまで本番は 11.0.1 のままです。
自分のサイトがどの版で止まっているか知りたい方は、WordPress 年式診断に URL を入れてみてください。


