我正在写一个插件,它有一个主要的插件依赖项。我使用POO-so类和名称空间来实现这一点。
我想在主插件之后加载一个插件,并在适当的时候进行一些检查和正确初始化。
我找到了一个awful solution 是为了检查主插件是否处于非活动状态is_plugin_inactive
. 这个解决方案的问题是您需要一个钩子,以便稍后加载加载项并创建其他问题-例如:当您想要使用wp_ajax_
钩
namespace MyPlugin;
class AddonMainClass{
public function __construct(){
$this->init(); //<-- Option 1
add_action(\'admin_init\', array( $this , \'init\' ) ); //<-- Option 2
add_action(\'_admin_menu\', array( $this , \'init\' ) ); //<-- Option 3
}
public function init(){
if( is_admin() ){
if ( is_plugin_inactive( \'main-plugin/MainPlugin.php\' ) ) {
// admin notices
}else{
// Init the addon
}
}
}
}
Problems with each option
<选项1:无法使用函数is\\u plugin\\u inactive(),我不确定之前是否加载了主插件选项2:使用此挂钩,在我调用时不会添加新菜单项
add_action( \'admin_menu\', array( $this, \'load_view_page\'));
在我的主插件内的类中显示所有菜单项选项3:正如我之前所说,钩子
_admin_menu
初始化我的插件似乎为时已晚,因此它会干扰一些钩子加载,如
wp_ajax_my_function
.我试着在网上找一个托蒂尔来做这件事,但没有成功。
正确执行此操作的最佳方法是什么?
最合适的回答,由SO网友:J.BizMai 整理而成
我找到的最佳解决方案是……:
在初始化加载项之前检查主插件是否处于活动状态wp_ajax_my_function
使用挂钩plugins_loaded
初始化加载项
使用函数签入纯PHPclasses
, functions
和constants
从主插件here
namespace MyPlugin;
class AddonMainClass{
public function __construct(){
add_action(\'plugins_loaded\', array( $this , \'init\' ) );
}
public function init(){
if( is_admin() ){
$is_main_plugin_active = $this->detect_plugin(
array(
\'classes\' => array(
\'MyPlugin\\\\Common\\\\ClassA\',
\'MyPlugin\\\\Common\\\\ClassB\'
),
\'functions\' => array(
\'MyPlugin\\\\useful_function\'
),
\'constants\' => array(
\'MyPlugin\\\\PLUGIN_DOMAIN\'
)
)
);
if ( ! $is_main_plugin_active ) {
// admin notices
}else{
// Init the addon
}
}
}
private function detect_plugin( $plugins ) {
/** Check for classes */
if ( isset( $plugins[\'classes\'] ) ) {
foreach ( $plugins[\'classes\'] as $name ) {
if ( class_exists( $name ) )
return true;
}
}
/** Check for functions */
if ( isset( $plugins[\'functions\'] ) ) {
foreach ( $plugins[\'functions\'] as $name ) {
if ( function_exists( $name ) )
return true;
}
}
/** Check for constants */
if ( isset( $plugins[\'constants\'] ) ) {
foreach ( $plugins[\'constants\'] as $name ) {
if ( defined( $name ) )
return true;
}
}
/** No class, function or constant found to exist */
return false;
}
}