如何在Widget的表单函数中获取$id变量?

时间:2012-02-20 作者:user13250

如何在widget的form函数中获取$id变量?根据widget的结构,我看到widget函数有$args作为参数,它将在函数体中提取。在我的例子中,我想使用包含当前侧栏id的$id变量(从提取的$args中)。如何在表单函数中使$id变量“可见”?有什么想法吗?

class Ex_Widget_Example extends WP_Widget {
    //constructor goes here
    function widget($args, $instance) {extract($args);}
    function update($new_instance, $old_instance ) { }
    function form( $instance ) {}
}
例如,我们有id为“my_sidebar”的边栏。我把这个小部件放进去了。例如,我们用来在页面上输出内容的我的小部件函数如下所示:

function widget($args, $instance) {
         extract($args);
         echo $id; //or just echo $args[\'id\'];
}
因此,在我的页面上,在我的“my\\u侧边栏”侧边栏中,我将看到一个文本“my\\u侧边栏”。那太好了。但我如何才能在widget的form函数中获得这个$id或$args[\'id\']。在类示例中,我看到,只有widget函数将$args作为参数。我不是OOP编程专家,我尝试创建一个静态变量(未成功),该变量将保留id值:

class Ex_Widget_Example extends WP_Widget {
    public static $widget_id;
    //constructor goes here
    function widget($args, $instance) {
             extract($args);
             self::$widget_id = $id;
             echo self::$widget_id //here outputs sidebar\'s id perfectly on my page
    }
    function update($new_instance, $old_instance ) { }
    function form( $instance ) {
             echo self::$widget_id //here outputs nothing on my widget\'s form
    }
}
也许wordpress先调用表单函数,再调用widget函数,这就是为什么我在表单上看不到任何东西。。。。不管怎样,有什么办法解决这个问题吗?

3 个回复
SO网友:fuxia

您是否搜索$args[\'widget_id\']? 只需将其保存在可以访问的变量中form() 后来

看看wp-includes/default-widgets.php 查看小部件的工作方式。虽然不是最好的代码,但它应该会给您一些提示。

SO网友:kaiser

作为@toscho answer的后续内容,您可能可以通过DB选项表获得当前侧栏(保存小部件):

$current_sidebar = array_search( 
    "{$this->id_base}-{$this->number}", 
    get_option( \'sidebars_widgets\' ), 
    true 
);
未测试

SO网友:Jungle Editor

以下内容在表单的函数中对我有用

public function form( $instance ) {
    $my_widget = $this;
    $widget_identifier = "{$this->id_base}-{$this->number}";
}
编辑:以下内容也适用

public function form( $instance ) {
    $widget_identifier = $this->id;
}

结束