激活的插件存储为对象,而不是路径

时间:2014-05-20 作者:Yoav Kadosh

这似乎是一种非常不寻常的行为:通常,在激活插件时,插件主文件(或引导)的路径存储在数据库中options.active_plugins.然而,以下代码中的某些内容导致Wordpress在数据库中存储对象本身,而不是对象的路径。

这是插件的引导文件(bootstrap.php):

/**
 * Plugin metadata
 */

require_once( plugin_dir_path( __FILE__ ) . \'MyPlugin.php\' );

$plugin = new MyPlugin();
$plugin->init();
激活后active_plugins 选项条目如下所示(使用get_option( \'active_plugins\' ):

Array {
    [0] => (object) MyPlugin
}
预期结果为:

Array {
    [0] => bootstrap.php
}

2 个回复
最合适的回答,由SO网友:kaiser 整理而成

您不应该在操作(附加到挂钩和过滤器的回调)之外添加代码。否则,您的变量可能与全局变量冲突。插件引导的默认/第一个操作是(取决于插件的类型):plugins_loadedmuplugins_loaded.

将挂钩从那里连接到wp_loaded 如果你想在上面运行init (但要使其多站点保存-init 还有其他缺点)。

SO网友:Yoav Kadosh

结果表明,使用名为$plugin 作为插件引导过程的一部分,Wordpress会存储该变量的内容,而不是包含文件的路径。要解决此问题,只需使用不同的变量名:

/**
 * Plugin metadata
 */

require_once( plugin_dir_path( __FILE__ ) . \'MyPlugin.php\' );

$plugin_starter = new MyPlugin();
$plugin_starter->init();

结束