问题是:
我想在开发模式下使用PHP8.x运行Wordpress 6.x,意思是define('WP_DEBUG', true);
,但是Wordpress 6.x 部分支持PHP8.x会抛出许多不推荐的警告,这会在屏幕上造成很大的混乱,同时也会导致cookie和REST的混乱。
在php.ini
或wp-config.php
中设置define('WP_DEBUG', true);
并不能解决问题,因为Wordpress在设置开发通常需要的D5
时会覆盖该设置。
解决方案不是直截了当的,我无法快速找到,无论是在Stack上还是在其他任何地方,所以下面我将回答我自己的问题,并为其他人解决问题。
发布于 2022-08-19 14:19:29
更改wp-include/load.php中设置error_reporting的行,可能在第450行附近:
if ( WP_DEBUG ) {
error_reporting( E_ALL);
只需添加& ~E_DEPRECATED
位,使其变为:
if ( WP_DEBUG ) {
error_reporting( E_ALL & ~E_DEPRECATED );
-他们为什么不把这样的东西放在配置文件中呢?在我(痛苦的)为wordpress编写插件和子主题的经历中,不可能使用调试模式,不是因为我的代码中有问题,而是因为在整个代码库中有几十个文件中的废弃代码。这使得WP_DEBUG毫无用处。不要让我知道默认情况下实现多环境支持是多么简单,我总是必须黑入wp-config.php文件(我假设其他人也是这样做的) :-(
发布于 2022-06-07 08:36:53
解决方案的关键是enable_wp_debug_mode_checks
过滤器,但是要使用它,您必须做一些特殊的事情。
正如文档所说:
此过滤器在插件可以使用之前运行。它是为非web运行时设计的。返回false将导致不检查WP_DEBUG和相关常量,除非您自己更新错误,否则将使用默认的PHP。要使用此筛选器,必须在加载$wp_filter之前定义WordPress全局,通常在wp-config.php中。
然后,当您禁用此默认错误报告覆盖-您可以设置自己的。最后的解决方案如下所示:
define('WP_DEBUG', true);
if (WP_DEBUG) {
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', true);
// disable friendly non informative error messages
define('WP_DISABLE_FATAL_ERROR_HANDLER', true);
$GLOBALS['wp_filter'] = [
'enable_wp_debug_mode_checks' => [
10 => [[
'accepted_args' => 0,
'function' => function() { return false; },
]],
],
];
}
error_reporting(E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED);
不幸的是,它也会自动关闭您自己的代码中的不推荐消息,但是在Wordpress解决其不推荐的代码片段之前,您可以做些什么。
https://wordpress.stackexchange.com/questions/406490
复制相似问题