[WordPress] Comment écrire un widget pour WordPress 2.8 (nouvelle API)?

 

La nouvelle version de WordPress, numérotée 2.8, devrait sortir d’ici quelques jours.

Très attendue, cette nouvelle mouture apporte un grand nombre d’améliorations. On y trouve notamment une toute nouvelle API de Widgets, qui se veut beaucoup plus simple et mieux organisée.

L’équipe de développement de WordPress avait d’ailleurs dévoilée une image exclusive, il y a quelques semaine de cela.

wordpress 28 widgets 300x185 [Wordpress] Comment écrire un widget pour Wordpress 2.8 (nouvelle API)?

Le système utilise en effet des mécanismes AJAX pour les mises à jour (enfin) et propose une interface orientée objet. Ainsi toutes les fonctionnalités possèdent leur propre fonction PHP.

Autre innovation de taille, chaque widget pourra être utilisé par plusieurs « barres » (c’est mon tagcloud qui va être content icon wink [Wordpress] Comment écrire un widget pour Wordpress 2.8 (nouvelle API)? )

Nous allons voir comment créer un widget pour WordPress 2.8.

Tout d’abord chaque widget étendra désormais une interface fournit par WordPress et possède un constructeur.

class Mon_Widget extends WP_Widget{
   function Mon_Widget() {
      $widget_ops = array(
         'classname' => 'mon_widget', // l'identifiant du widget
         'description' => 'un widget tout simple qui ne fait rien' ); // la description

      $this->WP_Widget('mon_widget', 'Mon widget', $widget_ops);
   }
...
}

Pour moi qui vient du monde Java, ce changement m’emplit de joie.

L’interface WP_Widget impose de créer deux méthodes: function widget() et function update().

function widget($args, $instance) {
 //cette fonction réalise le rendu graphique du widget
 echo '<p>Bonjour ! Bienvenu sur Websourcing.fr.</p>';
}

function update($new_instance, $old_instance) {
//cette fonction met à jour le widget
}

Une troisième fonction optionnelle permet de créer le formulaire dans l’interface d’administration (la petite boite qui représente le widget). Vous pouvez ainsi proposer de changer certains paramètres directement dans l’interface d’administration.

function form($instance) {
//pour ajouter un paramètre X
$X = strip_tags($instance['X']);
<p>
<label for="<?php echo $this->get_field_id('X'); ?>">
Valeur de X: <input id="<?php echo $this->get_field_id('X'); ?>" name="<?php echo $this->get_field_name('X'); ?>" type="text" value="<?php echo attribute_escape($X); ?>" />
</label>
</p>
}

Remarquez que vous n’avez plus besoin de récupérer les options en utilisant la fonction get_otions(). Désormais les variables sont directement attachées à l’instance $instance du widget (d’où la possibilité d’avoir plusieurs widgets d’un même type).

Enfin, pour enregistrer le widget, il faut utiliser la fonction suivante.

register_widget('Mon_Widget'); // on utilise ici le nom de la classe, c'est beaucoup mieux qu'avant.

Je trouve la nouvelle API beaucoup plus évidente. Tout est à sa place et les fonctions sont suffisamment parlantes. Cela nous promet des plugins de meilleure qualité.

Et vous qu’en pensez vous ?