Активированный плагин хранится как объект, а не как путь
Это кажется очень необычным поведением: обычно при активации плагина путь к основному файлу плагина (или начальной загрузке) сохраняется в базе данных в разделе 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 answers
Вы просто не должны добавлять код вне действий (обратные вызовы, прикрепленные к крючкам и фильтрам). В противном случае ваши переменные могут конфликтовать с глобальными переменными. По умолчанию/первым действием для начальной загрузки плагина будет (в зависимости от типа плагина): plugins_loaded
или muplugins_loaded
.
Прикрепите крючки оттуда к wp_loaded
, если вы хотите, чтобы материал запускался на init
(но сделайте это многосайтовым сохранением - init
имеет и другие недостатки).
Оказывается, что использование переменной с именем $plugin
в качестве части процесса начальной загрузки плагина приводит к тому, что Wordpress хранит содержимое этой переменной, а не содержит путь к файлу. Чтобы устранить проблему, просто используйте другое имя переменной:
/**
* Plugin metadata
*/
require_once( plugin_dir_path( __FILE__ ) . 'MyPlugin.php' );
$plugin_starter = new MyPlugin();
$plugin_starter->init();