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 xxx
PHP Warning: Cannot modify header information - headers already sent in /path/to/wordpress/wp-includes/rest-api/class-wp-rest-server.php on line xxx
PHP 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 = -1
Apache が 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.