插件中的自定义窗口小部件功能不起作用?

时间:2011-02-24 作者:Jared

我直接从我创建的一个主题中提取了一个代码,它是一个无序列表中所有50个状态的列表,打包到一个小部件中,您可以在侧边栏上拖放。

问题是,当我尝试在插件文件中使用此代码时,会出现以下错误:

Fatal error: Call to a member function register() on a non-object in C:\\xampp\\htdocs\\wordpress\\wp-includes\\widgets.php on line 431

为什么它可以在主题中工作,但不能在插件中工作?顺便说一句,活动主题并不是我去掉代码的主题。

这是我的代码:http://pastebin.com/ZeRWW3yb

谢谢

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

尝试替换:

register_widget(\'States_Widget\');
使用:

add_action(\'widgets_init\', \'register_states_widget\');
function register_states_widget() {
    register_widget(\'States_Widget\');
}

SO网友:toni_lehtimaki

让我们假设您需要通过将小部件名称作为参数传递来初始化类方法内的小部件。要做到这一点,您可以这样做:

class WidgetMonster {
    /**
     * Register widget via PHP lambda function as an argument to the add_action function
     * @var $widget_name string | WP_Widget.
     */
    public static function register_widget_helper( $widget_name ) {
        add_action(\'widgets_init\',
            function() use ( &$widget_name ) {
                return register_widget( $widget_name );
            }
        );
    }
}
注意,我们需要传递变量$widget_name 命名lambda函数以使用它。这样做的部分是use (&$widget_name). 如前所述,这样初始化的挂钩不能由remove_action.

结束

相关推荐

Why use widgets?

我对使用WordPress很陌生,我想知道使用小部件的好处是什么?看here 这听起来像是为那些不是程序员的人准备的,他们想在他们的网站上添加插件。对吗?或者小部件是否在某种程度上使站点更加健壮?