web-dev-qa-db-fra.com

Comment puis-je obtenir la variable $ id dans la fonction de formulaire du widget?

Comment puis-je obtenir la variable $ id dans la fonction de formulaire du widget? Selon la structure du widget, je vois que la fonction du widget a pour paramètre $ args, qui sera extrait dans le corps de la fonction. Dans mon cas, je veux utiliser la variable $ id (extraite de $ args) qui contient l'id de la barre latérale actuelle. Comment rendre la variable $ visible 'visible' dans la fonction de formulaire? Des idées?

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

Par exemple, nous avons sidebar avec l'id 'my_sidebar'. Je mets ce widget dedans. Par exemple, ma fonction de widget, que nous utilisons pour afficher quelque chose sur une page, ressemble à ceci:

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

Donc sur ma page, dans la barre latérale "my_sidebar", je verrai un texte "my_sidebar". C'est génial. Mais comment puis-je obtenir ce $ id ou $ args ['id'] dans la fonction de formulaire du widget. Dans l'exemple de classe que je vois, seule la fonction de widget prend $ args en argument. Je ne suis pas un expert en OOP pragramming, j'ai essayé de créer (sans succès) une variable statique qui conserverait la valeur 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
    }
}

Peut-être que la forme de formulaire d’appel wordpress fonctionne d’abord, avant la fonction de widget, c’est la raison pour laquelle je ne vois rien dans mon formulaire.

5
user13250

Recherchez-vous $args['widget_id']? Enregistrez-le simplement dans une variable à laquelle vous pourrez accéder ultérieurement dans form().

Regardez wp-includes/default-widgets.php pour voir comment fonctionnent les widgets. Ce n'est pas le meilleur code, mais il devrait vous donner des indices.

1
fuxia

Pour faire suite à la réponse @toscho, vous pourriez peut-être obtenir la barre latérale actuelle (qui contient le widget) via la table d'options de la base de données:

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

Pas testé

0
kaiser