Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

How can I get $id variable in widget's form function? According to widget's structure I see that widget function have $args as a parameter, which will be extracted in function's body. In my case i want to use $id variable (from extracted $args) which contains current sidebar's id. How can I make 'visible' $id variable in form function? Any ideas?

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 ) {}
}

For example we have sidebar with id 'my_sidebar'. I put this widget in it. For example my widget function, which we use to output something on page, looks like this:

function widget($args, $instance) {
         extract($args);
         echo $id; //or just echo $args['id'];
}

So on my page, in my 'my_sidebar' sidebar I will see a text 'my_sidebar'. That's great. But how can I get this $id or $args['id'] in widget's form function. In class example I see, that only widget function takes $args as argument. I'm not an expert in OOP pragramming, I tried to create a static variable (unsuccessfully), which would keep id value:

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
    }
}

Maybe wordpress call form function first, before widget function, that's why I can't see anything on my form ....anyway, any ideas how to solve this problem?

share|improve this question
    
Just to make that shure: You need the sidebar ID/Name - where the Widget was placed in - inside your widget? –  kaiser Feb 20 '12 at 22:53
    
Would you mind answering the question I asked ↑ here? Also: Please edit & improve your Q. So far there's a lot of confusion. :/ –  kaiser Mar 10 '12 at 11:11
    
sorry, I'm a new guy here. Yes! I put this widget for example in 'my_sidebar'. In this widget's widget function I can just write something like: echo '$id'; and in my front-end I will see sidebar's id - 'my_sidebar'. but I need to use this $id variable in widget's form function, because I want to display in select box which widgets already have this 'my_sidebar'. –  user13250 Mar 14 '12 at 17:19

2 Answers 2

Do you search for $args['widget_id']? Just save it in a variable you can access in form() later.

Look at wp-includes/default-widgets.php to see how widgets work. Not the best code, but it should give you some hints.

share|improve this answer
    
I know how to get widget id ....I don't know hot to 'transfer' this value in form function :( –  user13250 Mar 9 '12 at 20:25

As a follow up on @toscho answer, you maybe could get the current sidebar (that holds the widget) via the DB options table:

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

Not tested

share|improve this answer
    
Can you explain exactly how to use this? –  user13250 Mar 9 '12 at 20:31
    
Inside your widget that's registered to a sidebar. –  kaiser Mar 10 '12 at 11:10
    
@user13250 any progress? –  kaiser May 7 '12 at 0:29

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.