Widget
Un widget permet d'ajouter du contenu dans des zones spécifiques qui dépendent de votre thème. Dans le menu Apparence, le menu Widgets permet d'accéder aux widgets de votre Wordpress.
Méthode : Class WP_Widget
On crée un widget en étendant la classe WP_Widget.
class VV_Widget extends WP_Widget {
public function __construct() {
// construction de l'instance
}
public function widget( $args, $instance ) {
// affichage du widget
}
public function form( $instance ) {
// formulaire du widget
}
public function update( $new_instance, $old_instance ) {
// gestion des données du formulaire
}
}
Méthode : __construct()
Le constructeur permet d'initialiser nos instances :
function __construct()
{
parent::__construct(
'idWidget',
'mon Widget',
array('description' => "creation d'un Widget")
);
}
Un appel au constructeur du parent WP_Widget est lancé.
WP_Widget::__construct($id, $nom, $options, $controle)
$id : identifiant de votre widget. Il doit être unique.
$nom : nom de votre widget qui sera affiché sur la page de configuration.
$options : tableau des options de votre widget.
$controle : tableau d'options de contrôle de votre widget.
Toutes ces paramètres sont optionnels.
Méthode : form($instance)
La méthode form permet de décrire le formulaire de votre widget.
$instance : représente le tableau des valeurs envoyé par votre formulaire.
public function form($instance)
{
$texte = $instance['texte'] ?? '';
?>
<p>
<label for="<?php echo $this->get_field_id('texte'); ?>">Texte</label>
<input class="widefat"
id="<?php echo $this->get_field_id('texte'); ?>"
name="<?php echo $this->get_field_name('texte'); ?>"
type="text"
value="<?php echo esc_attr($texte); ?>"/>
</p>
<?php
}
Mon formulaire est constitué d'un champ texte :
La variable $texte reçoit le contenu précédent du champ texte.
get_field_id('texte') retourne l'identifiant du champ texte.
get_field_name('texte') retourne le nom du champ texte.
esc_attr($texte) échappe les caractères HTML de la variable $texte.
Méthode : update($new_instance, $old_instance)
La méthode update permet de traiter les données du formulaire pour d'éventuelles modifications ou corrections.
$new_instance : contient les nouvelles données du formulaire.
$old_instance : contient les anciennes données du formulaire.
La fonction doit retourner les données traitées sous forme de tableau associatif.
public function update($new_instance, $old_instance)
{
$instance['texte'] = $new_instance['texte'] ?? '';
$instance['texte'] = ucfirst($instance['texte']);
return $instance;
}
Dans l'exemple :
La variable$instance['texte'] reçoit le contenu $new_instance['texte'] si elle existe sinon une chaîne vide.
On met une majuscule à la première lettre de texte avec ucfirst().
Le tableau $instance est retourné.
Méthode : widget($args, $instance)
La méthode widget génère le HTML affiché dans vos pages.
$args : c'est un tableau associatif qui contient des morceaux de code HTML dépendant de votre thème.
$instance : contient les données du formulaire.
public function widget($args, $instance)
{
echo $args['before_widget'];
echo $args['before_title'] . "Exemple de Widget" . $args['after_title'];
echo $instance['texte'] ?? '';
echo $args['after_widget'];
}
Méthode : Dans quel fichier ?
Le code doit être ajouté à un fichier lancé par wordpress :
Dans le fichier functions.php de votre thème. Le risque est que si vous changez de thème, vous perdez votre widget.
Dans une extension.
Ajoutez le dossier vv-widget dans le dossier plugins.
Ajoutez le fichier vv-widget.php
/**
* Plugin Name: Exemple Widget
* Description: permet de découvrir la création de widget.
* Version: 1.0.0
* Author: Moi
* License: GPL-3.0
*/
if (!defined('ABSPATH')) {
exit;
}
if (!class_exists('VV_widget')) {
class VV_widget extends WP_Widget
{
function __construct()
{
parent::__construct('idVVWidget', 'mon Widget', array('description' => "creation d'un Widget"));
}
// Contenu affiché sur le site
public function widget($args, $instance)
{
echo $args['before_widget'];
echo $args['before_title'] . "Exemple de Widget" . $args['after_title'];
echo $instance['texte'] ?? '';
echo $args['after_widget'];
}
// formulaire dans l'administration
public function form($instance)
{
$texte = $instance['texte'] ?? '';
<p>
<label for="
echo $this->get_field_id('texte'); ">Texte</label>
<input class="widefat"
id="
echo $this->get_field_id('texte'); "
name="
echo $this->get_field_name('texte'); "
type="text"
value="
echo esc_attr($texte); "/>
</p>
}
// action sur les valeurs du formulaire
public function update($new_instance, $old_instance)
{
$instance['texte'] = $new_instance['texte'] ?? '';
$instance['texte'] = ucfirst($instance['texte']);
return $instance;
}
}
// ajout de notre widget à la liste des widgets
function vv_load_widget()
{
register_widget('VV_widget');
}
add_action('widgets_init', 'vv_load_widget');
}
register_widget : cette fonction permet d'ajouter votre widget à la liste des widgets.
Pour que votre widget soit effectif, il faut que cette fonction soit chargée à l'initialisation de tous les widgets de wordpress.
Pour cela, on va utiliser le Hook widgets_init auquel on va ajouter une fonction de rappel qui ajoutera notre widget.
function vv_load_widget : notre fonction de rappel
add_action('widgets_init', 'vv_load_widget') : ajout au Hook
Méthode : Application
Activez l'extension Exemple Widget.
Dans Apparence->Widgets déplacez "mon Widget" dans une barre latérale.
Remplissez le formulaire du widget, enregistrez.
Allez sur votre site et vérifiez les barres latérales.