WordPress 編集画面が真っ白・更新に失敗する原因と対処|REST API の止めすぎを確認

結論

WordPress の編集画面(ブロックエディター)が真っ白になる、または保存時に「更新に失敗しました。」「返答が正しい JSON レスポンスではありません。」と出るときは、エディターと REST API の通信が止められていないかを最初に確認します。

ブロックエディターは、投稿の読み込みと保存を REST API(/wp-json/ 以下)で行っています。WordPress 本体のサイトヘルスの説明文にも、ブロックエディター画面は投稿や固定ページの表示と保存を REST API に頼っている、と書かれています。そのため、次のような状態だと編集画面だけが壊れます。

  • セキュリティ系プラグインや自作コードで、REST API を全員に対して止めている
  • パーマリンク・.htaccess・サーバーの設定で、/wp-json/ が 404 や 403 を返す
  • プラグインやテーマが、REST の応答に余計な文字(警告文や空白)を混ぜて JSON を壊している

公式の REST API FAQ ははっきりと「REST API を無効にすべきではない。API に依存する管理画面の機能が壊れる」としています。制限したいときは、ログインしていないユーザーだけを止めるのが公式の方法です。

原因・仕組み

REST API の入口では、rest_authentication_errors フィルターの結果が確認されます。このフィルターで WP_Error を返すと、そのリクエストはエラーで終わります。ネット上には「REST API を無効化するコード」としてこのフィルターで常に WP_Error を返す例がありますが、それをそのまま入れると、ログイン中の管理者がエディターから送るリクエストも止まります。

ログイン中の判定にも注意点があります。REST API Authentication のページによると、Cookie 認証では nonce(X-WP-Nonce ヘッダーなど)が無いリクエストは、ログインしていてもユーザー0(未ログイン)として扱われます。ブロックエディターは nonce を付けて通信しているので通常は問題ありませんが、ページキャッシュで古い nonce が配られていると、ログインしていない扱いになることがあります。

サイト側から見える症状と、疑う場所の対応は次の通りです。

症状 疑う場所
編集画面が真っ白/「エディターで予期しないエラーが発生しました。」 プラグインの JavaScript の衝突、REST の応答エラー
保存で「返答が正しい JSON レスポンスではありません。」 /wp-json/ の 404・403、応答に混ざった PHP の警告
サイトヘルスに「REST API でエラーが発生しました」 REST API を止めるプラグイン・コード、サーバーの制限

手順(サンプルコード)

1. REST API が応答するか確かめる

ログインした状態で、ブラウザの開発者ツールの「ネットワーク」タブを開いて編集画面を再読み込みし、wp-json を含むリクエストの状態コードを見ます。401・403 なら認証や制限、404 ならパーマリンクやサーバーの設定、200 でも中身の先頭に警告文が混ざっていれば PHP 側の出力が原因です。管理画面の「ツール → サイトヘルス」でも REST API の状態を確認できます。

2. 悪い例:REST API を全員に対して止める

次のコードは悪い例です。そのまま使わないでください。

// 悪い例:ログイン中の管理者も含めて REST API を止めてしまう
add_filter( 'rest_authentication_errors', function ( $result ) {
    return new WP_Error( 'rest_disabled', 'REST API is disabled.', array( 'status' => 403 ) );
} );

3. 公式 FAQ の方法:ログインしていない人だけ止める

add_filter( 'rest_authentication_errors', function ( $result ) {
    // ほかの認証処理の結果(成功・エラー)はそのまま返す
    if ( true === $result || is_wp_error( $result ) ) {
        return $result;
    }
    if ( ! is_user_logged_in() ) {
        return new WP_Error(
            'rest_not_logged_in',
            __( 'You are not currently logged in.' ),
            array( 'status' => 401 )
        );
    }
    return $result;
} );

ただし、この方法でも未ログインの訪問者向けに REST API を使う機能(一部のフォームや検索、外部サービス連携)は止まります。導入前に、公開側で REST API を使っているプラグインが無いか確認してください。

4. それでも直らないとき

プラグインをすべて停止し、テーマを既定のテーマに切り替えて確認します。直ったら1つずつ戻して原因を特定します。管理画面ごと入れない場合は WordPress ログイン画面・管理画面が真っ白で入れないときの対処|プラグインを外から止める方法(準備中) の手順を使います。

動作確認(検証環境と結果)

WordPress 7.1.2(ja)/PHP 8.2.12 の CLI 検証環境で、下書きを1件作り、REST サーバーの認証チェック(check_authentication())と、下書きの取得(rest_do_request())を確かめました(php run.php wl2_rest.php、ログは tests/block-editor-white-screen-rest-api.md)。

no filter, admin check_authentication=NULL
admin GET draft (edit screen と同じ取得) status=200
bad filter, admin check_authentication=WP_Error rest_disabled status=403
good filter, admin check_authentication=NULL
good filter, guest check_authentication=WP_Error rest_not_logged_in status=401
guest GET draft status=401
  • フィルターが無い状態では、管理者は下書きを REST で取得できました(200)。
  • 悪い例のフィルターを入れると、管理者でも認証チェックが 403 エラーになりました。エディターの通信が止まるのはこの状態です。
  • 公式 FAQ の方法では、管理者は通り、未ログイン(ユーザー0)だけが 401 になりました。
  • ブラウザでのエディター表示、Cookie と nonce を使った実際の通信、サーバーの .htaccess による 404 は、この CLI 環境では確認していません。テスト用の下書きは削除しました。

WordPress 編集画面が真っ白・更新に失敗するときの注意点

  • 「REST API を止めるとセキュリティが上がる」と考えて全面停止すると、ブロックエディター、サイトヘルス、一部のプラグインの管理画面が壊れます。制限は誰に・どこまでを絞って行います。
  • REST の応答に PHP の警告が混ざると JSON が壊れます。本番では WP_DEBUG_DISPLAY を false にし、警告はログで確認します。
  • 独自のエンドポイントを作る場合は、permission_callback で権限を確認します(permission_callback がない警告の対処|REST ルートの権限設計)。
  • ページキャッシュでログイン中のユーザーにもキャッシュを返していると、古い nonce により「ログインしていない」扱いになることがあります。

WordPress 編集画面が真っ白・更新に失敗する原因と対処でよくあるミス

  • セキュリティ系プラグインの「REST API を無効化」設定を有効にしたまま、編集画面の不具合を別の原因だと思い込む。
  • ネットで見つけた無効化コードを functions.php に貼り、何が起きているか分からなくなる。
  • パーマリンク設定を変えたあとに .htaccess が更新されず、/wp-json/ が 404 になる(パーマリンク変更後に404になる原因と対処|.htaccess と mod_rewrite)。
  • プラグインの停止で直ったのに、どれが原因かを確かめずに全部を戻す。

WordPress 編集画面が真っ白・更新に失敗する原因と対処のチェックリスト

  • [ ] 開発者ツールで wp-json へのリクエストの状態コードを見た
  • [ ] サイトヘルスで REST API の状態を確認した
  • [ ] REST API を全面停止する設定・コードが無いか確認した
  • [ ] 制限するなら、未ログインだけを止める公式の方法にした
  • [ ] 応答に PHP の警告が混ざっていないか確認した
  • [ ] プラグイン停止と既定テーマで切り分けた

WordPress 編集画面が真っ白・更新に失敗する原因と対処のFAQ(よくある質問)

Q. クラシックエディターに戻せば直りますか。
A. 表示は戻るかもしれませんが、REST API が止まっている原因は残ります。サイトヘルスやほかのプラグインにも影響するので、原因を直すことを勧めます。

Q. ユーザー一覧(/wp/v2/users)を公開したくないだけです。
A. API 全体ではなく、そのエンドポイントだけを制限する方法を検討してください。全面停止より影響が小さく済みます。

Q. 固定ページだけ編集画面が白くなります。
A. 固定ページ用のテンプレートやブロックを追加するプラグイン・テーマのコードを疑い、停止して確認します。

筆者の見解(WordPress 編集画面が真っ白・更新に失敗する原因と対処)

編集画面の不具合は「エディターが壊れた」と見えますが、実際には裏側の REST API の通信が止められているケースを先に疑うのが効率的だと考えています。私見では、REST API の全面停止はセキュリティ対策として得るものより失うものが大きく、公式 FAQ が示すように「未ログインだけ止める」か、守りたいエンドポイントだけを絞って制限するのが現実的です。検証でも、全面停止のコードは管理者まで止めることがはっきり確認できました。

WordPress 編集画面が真っ白・更新に失敗する原因と対処の関連項目

出典(一次情報)

タイトルとURLをコピーしました