# Un Repeater Elementor construit une liste de témoignages sans champ personnalisé

> Pour une liste répétable gérée depuis le panneau du widget, le contrôle Repeater d'Elementor évite d'installer un plugin de champs personnalisés supplémentaire.

- Auteur : WordPress Développement
- Publié le : 2022-01-26
- Mis à jour le : 2022-01-26
- Catégorie : Elementor
- URL : https://www.wpmoderne.fr/elementor/repeater-elementor-liste-temoignages-sans-champ-personnalise/

## L’essentiel

- Chaque témoignage devient une ligne du Repeater, pas un post séparé
- Trois champs par ligne suffisent : nom, texte, note
- L'ordre d'affichage suit l'ordre des lignes dans le panneau

Cinq témoignages, une note sur cinq étoiles, un nom et une fonction : voilà tout le contenu qu'un client artisan souhaitait afficher sur sa page d'accueil, sans jamais dépasser cette quantité. Installer un plugin de témoignages complet, avec son propre post type, ses shortcodes et ses réglages d'affichage, aurait représenté une dépendance disproportionnée pour un besoin aussi borné.

Le contrôle Repeater, intégré nativement à l'API des widgets Elementor, permet de construire exactement ce type de liste directement dans le panneau de configuration d'un widget personnalisé, sans recourir à un post type séparé ni à une extension tierce.

## La déclaration du contrôle Repeater

Un Repeater se déclare dans la méthode `register_controls()` du widget, en définissant d'abord les champs internes de chaque ligne avant de les rattacher au contrôle principal via `Repeater`, une classe fournie par l'API d'Elementor.

```
use Elementor\Repeater;

protected function register_controls() {
    $repeater = new Repeater();

    $repeater->add_control(
        'nom',
        array(
            'label' => 'Nom du client',
            'type'  => \Elementor\Controls_Manager::TEXT,
        )
    );
    $repeater->add_control(
        'texte',
        array(
            'label' => 'Témoignage',
            'type'  => \Elementor\Controls_Manager::TEXTAREA,
        )
    );
    $repeater->add_control(
        'note',
        array(
            'label'   => 'Note sur 5',
            'type'    => \Elementor\Controls_Manager::NUMBER,
            'min'     => 1,
            'max'     => 5,
            'default' => 5,
        )
    );

    $this->add_control(
        'temoignages',
        array(
            'label'      => 'Liste des témoignages',
            'type'       => \Elementor\Controls_Manager::REPEATER,
            'fields'     => $repeater->get_controls(),
            'title_field' => '{{{ nom }}}',
        )
    );
}
```

## Le rendu de la liste dans le widget

> L'essentiel à retenir : Chaque témoignage devient une ligne du Repeater, pas un post séparé ; Trois champs par ligne suffisent : nom, texte, note ; L'ordre d'affichage suit l'ordre des lignes dans le panneau

La méthode `render()` parcourt ensuite le tableau des lignes, disponible via les réglages du widget, pour générer le HTML final. Chaque ligne du Repeater arrive sous forme de tableau associatif reprenant les identifiants déclarés plus haut.

```
protected function render() {
    $settings = $this->get_settings_for_display();

    echo '<ul class="wpm-temoignages">';
    foreach ( $settings['temoignages'] as $item ) {
        printf(
            '<li><strong>%s</strong> (%d/5) — %s</li>',
            esc_html( $item['nom'] ),
            (int) $item['note'],
            esc_html( $item['texte'] )
        );
    }
    echo '</ul>';
}
```

L'échappement systématique via `esc_html()` reste indispensable, même pour un contenu saisi uniquement par l'équipe éditoriale : de bonnes pratiques de sécurité s'appliquent indépendamment de la confiance accordée à l'auteur du contenu.

## Pourquoi cette approche convient à ce cas précis

Le Repeater se montre particulièrement adapté quand trois conditions sont réunies : le nombre de lignes reste limité (une dizaine au grand maximum), le contenu ne nécessite pas de page dédiée par élément, et l'équipe éditoriale préfère gérer cette liste directement depuis le panneau du widget plutôt que depuis une liste de contenus séparée dans l'administration.

- Aucun post type additionnel à créer ni à maintenir.
- L'ordre des témoignages se règle simplement en glissant les lignes dans le panneau.
- La suppression d'un témoignage se fait en un clic, sans risque de contenu orphelin ailleurs sur le site.

> Le Repeater convient à une liste courte et stable ; au-delà d'une trentaine d'éléments, un post type dédié redevient le choix le plus sain pour l'éditeur comme pour les performances.

## Notre verdict

Pour cinq témoignages fixes affichés sur une seule page d'accueil, le Repeater a rempli parfaitement son rôle, avec un temps de développement limité à une trentaine de minutes et une prise en main immédiate par l'équipe éditoriale du client. Cette solution reste à réserver aux listes courtes ; les cas d'usage plus ambitieux appellent une architecture différente, hors du périmètre de cet article.
