第一个插件base调用do_action()
或apply_filters()
. 第二个插件,即依赖于第一个插件的插件,使用add_action()
或add_filter()
.
基本示例基本插件
<?php # -*- coding: utf-8 -*-
/**
* Plugin Name: Base
* Plugin URI: http://wordpress.stackexchange.com/q/112075
*/
class Plugin_Base {
public function __construct()
{
add_action( \'wp_loaded\', array ( $this, \'plugin_setup\' ) );
}
public function plugin_setup()
{
$headers = get_file_data(
__FILE__,
array(
\'name\' => \'Plugin Name\',
\'uri\' => \'Plugin URI\'
)
);
$data = new stdClass;
$data->plugin_name = $headers[ \'name\' ];
$data->plugin_uri = $headers[ \'uri\' ];
$data->plugin_file = __FILE__;
do_action( \'plugin_base_loaded\', $data );
}
}
new Plugin_Base;
注意自定义操作plugin_base_loaded
. 这将是所有依赖插件的锚。
现在,让我们创建第二个插件,该插件应在加载完base之后运行。
插件插件
<?php # -*- coding: utf-8 -*-
/**
* Plugin Name: Base Addon
*/
class Plugin_Base_Addon {
protected $data;
public function __construct()
{
add_action( \'plugin_base_loaded\', array ( $this, \'setup\' ) );
}
public function setup( $data )
{
$this->data = $data;
add_action( \'wp_footer\', array( $this, \'wp_footer\' ) );
}
public function wp_footer()
{
printf(
\'<p>I am an addon for <a href="%1$s">%2$s</a> which lives in <code>%3$s</code>.</p>\',
esc_url( $this->data->plugin_uri ),
esc_html( $this->data->plugin_name ),
esc_html( $this->data->plugin_file )
);
}
}
new Plugin_Base_Addon;
如果base未激活,则第二个插件将不会执行任何操作。如果它处于活动状态,它将等待底座加载完毕。然后,它会将有关基的信息打印到前端页脚中。你可以在我的文章中看到一个更广泛的例子Initialize a plugin with a configuration object, 代码示例(包括附加插件)包括on GiHub.