WooCommerce 11.1.0 の 500 エラーは gettext の 1 行で直る

清水 風音

PatchOn創業者兼CEO

WooCommerce 11.1.0 の 500 エラーは gettext の 1 行で直る

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 つ揃う必要があります。

  1. WooCommerce が 11.1.0
  2. 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 件目は管理画面に入れたと書かれていて、手元と同じ割れ方です。

WooCommerce 11.1.0 が有効なまま管理画面のプラグイン一覧は開けるが、この状態でフロントは 500 になっている

原因は開発元のサポートが特定済み

原因は僕が読み解いたものではなく、フォーラムのスレッドで開発元のサポート(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 ではブラウザ側の「このページは動作していません」が表示されました。管理者宛の復旧メールも来ませんでした。

WooCommerce 11.1.0 に上げた直後のトップページを Chrome で開いたところ。本文が 0 バイトの HTTP 500 が返り、Chrome は「このページは動作していません」を表示している

事前検査は止め、修正版を提案してきた

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

事前検査の結果画面。WooCommerce 11.0.1 → 11.1.0 が「確認待ち」で止まり、AI 修正 1 件として子テーマの functions.php を直した版が提案されている

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

自分のサイトがどの版で止まっているか知りたい方は、WordPress 年式診断に URL を入れてみてください。

お使いの WordPress は何年式ですか

URL を入れるだけで、いつから更新が止まっているか(年式)を外から診断できます。

  • 登録不要
  • インストール不要
  • 結果はその場で表示

関連記事

株式会社ロケッタ

東京都渋谷区渋谷3-1-9 渋谷YAZAWAビル3FTEL: 050-6867-9025

© Rocketa Inc. 2026. All Rights Reserved.