vendredi 25 septembre 2026

À propos

Contact

Outils & workflow

Un générateur de jeux de données réalistes pour vos environnements de dev

Peupler un site local avec du contenu varié et cohérent grâce à un script basé sur Faker, plutôt que des articles lorem ipsum.

Par Clément Hadrot • 25 janvier 2026 • 5 min de lecture • Aucun commentaire
Un générateur de jeux de données réalistes pour vos environnements de dev

Développer une mise en page de listing d’articles avec cinq lignes de « Lorem ipsum dolor sit amet » identiques ne révèle jamais les vrais problèmes visuels : titres de longueurs variables qui cassent une grille, images absentes qui écrasent une mise en page pensée pour un ratio précis, extraits qui débordent d’une carte. Ce texte ne traite pas de la base de données anonymisée reconstituée à partir de données de production, déjà couverte, mais d’une approche différente et complémentaire : générer depuis zéro un jeu de données fictif mais réaliste, avec la bibliothèque PHP Faker.

L’intérêt de cette approche par rapport à une base anonymisée existante est double : elle ne dépend d’aucune donnée de production, ce qui la rend utilisable dès le tout premier jour d’un nouveau projet, et elle permet de générer précisément le volume et la variété de contenu nécessaires pour tester un cas limite, comme un article au titre extrêmement long ou une catégorie avec un seul contenu.

Installer Faker dans le contexte WP-CLI

La bibliothèque fzaninotto/faker (ou son fork maintenu fakerphp/faker) s’installe comme dépendance de développement du projet :

composer require --dev fakerphp/faker

Un fichier de commande personnalisée WP-CLI, placé dans wp-content/mu-plugins/commandes-dev.php (à ne jamais déployer en production, protégé par une vérification d’environnement), enregistre une nouvelle commande dédiée au peuplement du site.

Le script de génération, adapté au projet

Sur un projet de blog de recettes de cuisine pour un client, le script génère des articles avec des titres cohérents avec le thème du site, plutôt que des phrases Faker génériques hors sujet :

L'essentiel à retenir : Faker génère des textes, noms et images cohérents entre eux ; Un script WP-CLI personnalisé remplace des heures de saisie manuelle ; Les CPT et taxonomies du projet reçoivent chacun leur propre logique
<?php
use Faker\Factory;

if (! defined('WP_CLI')) {
    return;
}

class CommandesDev {
    public function peupler_recettes($args, $assoc_args) {
        $nombre = $assoc_args['nombre'] ?? 50;
        $faker = Factory::create('fr_FR');

        $ingredients = ['tomate', 'basilic', 'poulet', 'lentilles', 'saumon', 'courgette', 'parmesan'];
        $techniques = ['rôti', 'mijoté', 'sauté', 'vapeur', 'gratiné', 'mariné'];

        $categories = get_terms(['taxonomy' => 'categorie_recette', 'hide_empty' => false]);

        for ($i = 0; $i < $nombre; $i++) {
            $ingredient = $faker->randomElement($ingredients);
            $technique = $faker->randomElement($techniques);
            $titre = ucfirst("{$ingredient} {$technique} " . $faker->words(2, true));

            $id = wp_insert_post([
                'post_type'    => 'recette',
                'post_title'   => $titre,
                'post_content' => $this->generer_contenu_recette($faker, $ingredient),
                'post_excerpt' => $faker->sentence(rand(8, 22)),
                'post_status'  => 'publish',
                'post_date'    => $faker->dateTimeBetween('-2 years', 'now')->format('Y-m-d H:i:s'),
            ]);

            if (! empty($categories)) {
                wp_set_object_terms($id, $faker->randomElement($categories)->term_id, 'categorie_recette');
            }

            update_post_meta($id, 'temps_preparation', $faker->numberBetween(10, 90));
            update_post_meta($id, 'nombre_portions', $faker->numberBetween(2, 8));

            WP_CLI::log("Recette créée : {$titre}");
        }

        WP_CLI::success("{$nombre} recettes générées.");
    }

    private function generer_contenu_recette($faker, $ingredient) {
        $etapes = "";
        for ($e = 1; $e <= rand(3, 6); $e++) {
            $etapes .= "<p>Étape {$e} : " . $faker->sentence(rand(10, 18)) . "</p>";
        }
        return "<p>Une recette simple à base de {$ingredient}.</p>" . $etapes;
    }
}

WP_CLI::add_command('dev peupler-recettes', ['CommandesDev', 'peupler_recettes']);

Lancer la génération

wp dev peupler-recettes --nombre=500 --allow-root

Sur la machine de développement de l’agence, cette commande a généré 500 recettes complètes, avec métadonnées et taxonomie assignée, en un peu moins de douze secondes, contre plusieurs heures qu’aurait demandé une saisie manuelle équivalente pour obtenir une variété comparable de longueurs de titre et de contenu.

Générer aussi des images cohérentes

Pour les projets qui ont besoin d’images à l’échelle, Faker peut aller chercher des images de substitution auprès d’un service comme Picsum Photos, à ne jamais utiliser en production mais parfaitement adapté à un environnement de développement local :

$url_image = 'https://picsum.photos/800/600?random=' . $faker->numberBetween(1, 9999);
$id_media = media_sideload_image($url_image, $id, $titre, 'id');
set_post_thumbnail($id, $id_media);

Adapter la logique à chaque type de contenu personnalisé

La vraie valeur de cette approche ne tient pas dans l’appel générique à Faker, mais dans l’effort de rendre chaque champ personnalisé cohérent avec la réalité métier du projet. Un CPT « événement » aura besoin de dates futures plutôt que passées, un CPT « témoignage client » aura besoin de noms et de notes de satisfaction plausibles, un CPT « offre d’emploi » aura besoin de fourchettes de salaire réalistes pour le secteur du client. Un script générique qui produit des données incohérentes ne teste rien de plus utile que du lorem ipsum.

Type de contenuGénérateur Faker adapté
Article de blogTitres et paragraphes thématiques personnalisés
Fiche produitPrix réalistes, SKU, stock aléatoire borné
Témoignage clientNoms, notes 3 à 5 étoiles, textes courts
Événement à venirDates futures uniquement, lieux plausibles

Un jeu de données de test qui ne ressemble pas au métier du client cache exactement les bugs que le client rencontrera en premier une fois le site en production.

En résumé

Faker, combiné à une commande WP-CLI personnalisée écrite pour chaque projet, remplace efficacement le contenu lorem ipsum par un jeu de données varié et pertinent, sans dépendre d’un accès à une base de production existante. Le temps investi à écrire une logique de génération spécifique au métier du client, plutôt qu’un script générique, se rentabilise dès la première revue de mise en page où les cas limites apparaissent naturellement plutôt que d’être découverts en production.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi