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.
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.
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é