[note: 我在提出此问题之前解决了问题,并认为其他人会觉得我的研究/解决方案很有帮助,请参阅Can I answer my own question?]
讨论中的站点使用了一个自定义主题和特定于站点的插件(注册自定义帖子类型、自定义分类法等),这两者我都写过。
事实证明wp-activate.php
引导结果为plugins not being loaded...这让我非常震惊(我在任何地方都找不到记录)。
我的主题header.php
调用特定于站点的插件中定义的方法之一。因为插件在wp-activate.php
运行时,该方法未定义,PHP将消亡。更糟的是wp-activate.php
bootstrap还禁用PHP错误消息(即使在WP_DEBUG
设置为true),因此,白色死亡屏幕:-(
解决方案为了解决这个问题,我activate_header (第一个钩子在wp-active.php
引导)并自己加载特定于站点的插件,如下所示:
add_action (\'activate_header\', \'load_site_specific_plugin\') ;
function
load_site_specific_plugin ()
{
if (wp_installing ()) {
require_once (WP_PLUGIN_DIR . \'path to site-specific plugin\') ;
}
return ;
}
有关我测试的原因,请参见下面的血淋淋的死亡部分
wp_installing()
通话前
require_once()
.
另一种解决方案是添加header-wp-activate.php
(这不依赖于特定于站点的插件中定义的任何方法)到我的主题。就我而言,这似乎不是正确的选择,但对其他人来说可能是。
血淋淋的细节我不知道为什么wp-activate.php
不应加载插件。但下面是对wp-activate.php
引导,以及为什么它会导致插件无法加载和PHP错误消息无法显示。
第一wp-activate.php
开始于:
define( \'WP_INSTALLING\', true );
定义
WP_INSTALLING
as true在整个
wp-activate.php
独自创立对于我所遇到的问题,最重要的是
wp_get_active_and_valid_plugins() (调用
wp-settings.php
作为引导的一部分)包含以下内容:
if ( empty( $active_plugins ) || wp_installing() )
return array();
因此,bootstrap认为该站点甚至不使用任何插件
get_option(\'active_plugins\')
返回非空数组。
了解为什么在加载我的主题时WP死机时没有输出PHP错误header.php
(再说一次,即使我define (\'WP_DEBUG\', true) ;
), 我们得看看路wp_debug_mode() 已写入。wp_debug_mode()
在调用之前调用wp_get_active_and_valid_plugins()
在wp-activate.php
引导并包含以下内容:
if ( defined( \'XMLRPC_REQUEST\' ) || defined( \'REST_REQUEST\' ) || ( defined( \'WP_INSTALLING\' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
@ini_set( \'display_errors\', 0 );
}
因此
wp-activate.php
bootstrap不会加载任何插件,它还会导致因该事实而导致的PHP错误无法显示;因此,死亡的白色屏幕!啊!!!
谁能向我解释一下为什么wp-activate.php
引导应该这样做吗?
TL;DR:请参阅the comment 我留下了一篇关于Make WordPress Core上的下一个引导/加载特性项目的帖子。