この問題は この質問 にあり、問題の原因を突き止めようとしましたが、今ではもっと混乱しています。
現在のWordPress 4.5.5から自分のサイトをアップグレードしようとしています。しかし、まず最初に、テーマとプラグインによって引き起こされたエラーを解決したいです。
Wp-config.phpでは、WP_DEBUGとWP_DEBUG_LOGをtrueに設定しました。
私はすべてのプラグインを無効にし、Twenty 15のテーマを有効にしました。
このような状況下では、フロントエンドではなく、wp-adminページでのみ次のエラーが発生します。
PHP Warning: An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the <a href="https://wordpress.org/support/">support forums</a>. (WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.) in /Applications/MAMP/htdocs/site-url.com/wp-includes/update.php on line 306
また、1つのプラグインをアクティブにすると(最初に試した3つのプラグインで1つずつ)、次のような他のエラーも発生します。
PHP Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/site-url.com/wp-includes/update.php:306) in /Applications/MAMP/htdocs/site-url.com/wp-includes/pluggable.php on line 1167
私は以下のプラグインのそれぞれでそのエラーを得ました、それぞれが別々に活性化されました、そして、二十五のテーマが活発である:
これらのプラグインはそれぞれ最新のものになっています。
これは 詳細なログファイルです 私がしたことと各ステップでのエラーに注目してください。
これは奇妙な振る舞いのように思えますが、どのヘッダを起動しても「ヘッダはすでに送信されました」というエラーが発生します。
このエラーを解決するための次のステップは何ですか?私はそれが問題がfunctions.phpにあると言う時に理解するように、デバッグメッセージが具体的に欠けているのを発見しています、それは実際にはほとんどいつも他の何かによって引き起こされます。
最初のエラー:
PHP Warning: An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the <a href="https://wordpress.org/support/">support forums</a>. (WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.) in /Applications/MAMP/htdocs/site-url.com/wp-includes/update.php on line 306
これは基本的にWordPressがコア、プラグイン、テーマあるいは翻訳関連のアップデートをチェックするためにapi.wordpress.org
に接続しようとしていることです。自動アップデートを無効にしても、手動アップデートにもアップデートチェックが必要なので、WordPressはこれらのチェックを行います。
2番目のエラー:
PHP Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/site-url.com/wp-includes/update.php:306) in /Applications/MAMP/htdocs/site-url.com/wp-includes/pluggable.php on line 1167
これはおそらくWordPressがHTTPヘッダを生成する前に出力に送られている最初のエラー(あるいは他の何らかのエラー)の結果です。実際、HTTPヘッダを送信する前に何か(print
、echo
など)を出力した場合、このheaders already sent
エラーが発生します。
その他のエラー:
私があなたのdebug.log
ダンプで見た唯一の他のエラーは廃止予定のWordPress関数呼び出しを使用しているいくつかのプラグインです。それらのプラグインが更新されたバージョンを持っている場合、これらのエラーは更新後も持続しませんので、それらは本当に深刻ではありません。
デバッグするときは、これらのエラーをdebug.log
ファイルにのみ送信し、wp-config.php
で次のようにエラーをブラウザに表示しないようにします。
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
上記を設定すると、エラーを出力バッファ(ブラウザなど)に出力する代わりに、WordPressはdebug.log
ディレクトリにあるwp-content
ファイルにエラー only を出力します(Webから書き込み可能な場合)。サーバ)。これの利点は:
ブラウザよりもdebug.log
ファイルのエラー(エラー、警告、注意など)をチェックする方が簡単です。
ブラウザへのエラー出力はサイトのHTMLを壊します。
Error only をdebug.log
ファイルに記録することで、関連するheaders already sent
エラーもすべて回避できます。
上記のデバッグ方法を採用した後でも、WordPressはあなたのdebug.log
ファイルに最初のエラーを生成し続けます。それはdebug.log
ファイルを非常に速くいっぱいにするでしょう、そしてあなたがlocalhost
で開発している時(特にあなたがオフラインの時)は更新を継続的にチェックする必要は本当にないのでそれは厄介です。
幸い、pre_http_request
フィルタフックを使ってこのアップデートチェックを止めることができます。あなたのテーマのfunctions.php
ファイルで、あるいはもっと良いことに、カスタムプラグインで以下のコードを使用して、オフラインまたはlocalhost
で開発しているときにWordPressの更新チェックを停止するためにそれを使用してください。
add_filter( 'pre_http_request', 'wp_update_check_short_circuit', 20, 3 );
function wp_update_check_short_circuit( $preempt = false, $args, $url ) {
if ( stripos( $url, 'https://') === 0 ) {
$url = substr( $url, 8 );
}
else {
$url = substr( $url, 7 );
}
// stop other URL(s) requests as well (if you need to) in the same manner
if ( stripos( $url, 'api.wordpress.org') === 0 ) {
// WP is trying to get some info, short circuit it with a dummy response
return array(
'headers' => null,
'body' => '',
'response' => array(
'code' => 503,
'message' => 'SERVICE_UNAVAILABLE'
),
'cookies' => array(),
'filename' => ''
);
}
// returning false will let the normal procedure continue
return false;
}
このコードは基本的にWordPress HTTP APIを使用してapi.wordpress.org
に送信されたHTTPリクエストをショートするため、これ以降、WordPressはアップデートチェック関連のエラーを生成しなくなります。他の内部HTTPリクエストもショートする必要がある場合は、上記のコードを変更してください。
注: ライブサーバーに変更をアップロードするときは、必ずこのコードをオフにしてください。ライブサーバーでアップデートチェックを誤って停止しないようにするには、カスタムプラグインで上記のコードを使用することをお勧めします。そのようにして、あなたが
localhost
で開発しているときだけ、プラグインを有効にすることができます。