WordPress Gutenberg でエラー「更新に失敗しました」が出る問題の解決方法
問題
WordPress の管理画面で、 Gutenberg エディタ(ブロックエディタ)を使ってポストを更新しようとすると「更新に失敗しました」というメッセージが出ます。 しかし実際には投稿は適切に更新されていて、エラーメッセージが間違って表示される状態です。
対象バージョン
問題が発生した PHP と WordPress のバージョンは次のとおりです。
- PHP
5.6.x - WordPress
5.0.3
原因
Gutenberg エディタ(ブロックエディタ)がうまく動かない問題の原因はたくさんあるようですが、今回私が経験した問題の場合は PHP の設定 always_populate_raw_post_data が原因でした。
PHP のエラーログには次のようなメッセージが出ていました( xxx は行数)。
PHP Warning: Cannot modify header information - headers already sent in /path/to/wordpress/wp-includes/rest-api.php on line xxxPHP Warning: Cannot modify header information - headers already sent in /path/to/wordpress/wp-includes/rest-api/class-wp-rest-server.php on line xxxPHP Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0解決方法
エラーメッセージの指示どおりに PHP の設定値 always_populate_raw_post_data を -1 にセットすると解決しました。
php.ini が使える場合は次のとおりにします。
always_populate_raw_post_data = -1Apache が mod_php5.c モジュールを使っている場合は .htaccess を使ってセットすることもできます。
<IfModule mod_php5.c>
php_value always_populate_raw_post_data -1
</IfModule>always_populate_raw_post_data は PHP 5.6.0 で deprecated となり、 PHP 7.0.0 で削除されたので PHP 7 を使っている場合はこの問題は起こらないようです。
This feature was DEPRECATED in PHP 5.6.0, and REMOVED as of PHP 7.0.0.