我怀疑从另一个插件扩展一个类是否明智。你不知道下次其他插件更新时会发生什么。
然而,一般来说,您可以控制函数在钩子“队列”中运行的时间passing a third parameter-- a priority. 因此,传递足够高的优先级,您的函数应该在其他插件的函数之后运行。
add_action(
\'widgets_init\',
create_function(\'\', \'register_widget("Bar");\')
,100
);
我不知道这对你是否有效。我从来没有试过。
您还应该知道,由于插件加载顺序的原因,您可能会遇到问题。
Changing Plugin Load Order
Does an activated plugin automatically mean its methods are available to other WP functions?
widget_init
runs after plugins_loaded
所以在你的情况下,这可能不会是一个问题。
在进一步调查中。。。我得到的错误涉及构造函数所需的缺少变量。以下工作。
if ( ! class_exists( \'Foo\' ) ) {
class Foo extends WP_Widget {
/*constructs etc*/
function __construct($id = \'twidg\', $descr = \'Test Widget\', $opts = array()) {
$widget_opts = array();
parent::__construct($id,$descr,$widget_opts);
/*do stuff*/
}
}
}
function rw_cb() {
register_widget("Foo");
}
add_action(\'widgets_init\', \'rw_cb\');
class Bar extends Foo {
function __construct() {
$widget_opts = array();
parent::__construct(\'twidgextended\',\'Test Widget 2\',$widget_opts);
}
}
function rw_cb_2() {
register_widget("Bar");
}
add_action(\'widgets_init\', \'rw_cb_2\');
当每个组件都粘贴到一个虚拟插件文件中时,它就会工作。我唯一一次遇到涉及找不到类文件的致命错误是,如果我尝试使用
Bar
类定义,在具有
Foo
定义,这很有意义。
按如下方式包装该块可解决该问题,您可以按任何顺序激活该块。
if (class_exists(\'Foo\')) {
class Bar extends Foo {
function __construct() {
$widget_opts = array();
parent::__construct(\'twidgextended\',\'Test Widget 2\',$widget_opts);
}
}
function rw_cb_2() {
register_widget("Bar");
}
add_action(\'widgets_init\', \'rw_cb_2\');
}