错误诊断:
The first Error: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也会进行这些检查,因为手动更新也需要更新检查。
The second Error:
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头之前发送到输出的第一个错误(或其他错误)的结果。事实上,如果您输出任何内容(使用
print
,
echo
在发送HTTP头之前,您将看到
headers already sent
错误
Other Errors:
我在你的debug.log
dump是一些使用不推荐的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
目录(如果web服务器可写入)。这样做的好处是:
在debug.log
文件,而不是在浏览器中。
向浏览器输出的错误会破坏网站的html。
通过记录错误only到debug.log
文件,您还可以避免headers already sent
全部出错。
停止WordPress更新检查:即使您采用上述调试方法,WordPress仍会在您的debug.log
文件那很烦人,因为它会填满的debug.log
快速归档(&F);在中开发时,确实不需要不断检查更新localhost
(尤其是脱机时)。
幸运的是,您可以使用pre_http_request
过滤器挂钩。在主题中使用以下代码functions.php
文件,甚至更好,在自定义插件中,并使用它在脱机或在中开发时停止WordPress更新检查localhost
:
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.wordpress.org
使用WordPress HTTP API。如果还需要短路其他内部HTTP请求,只需修改上述代码即可。
Note:将更改上载到live server时,请记住关闭此代码。为了确保不会意外停止live server中的更新检查,最好在自定义插件中使用上述代码。这样,只有在中开发时才能启用插件localhost
.