Le WordPress d'aujourd'hui, décodé pour les développeurs

Outils & workflow

wp-cli et Meta Box : générer un jeu de données pour un catalogue de pièces

Une commande wp-cli qui remplit un catalogue de pièces détachées avec des champs Meta Box cohérents, pour tester l'affichage et les filtres avant la livraison d'un projet.

Par WordPress Développement • 27 août 2022 • 4 min de lecture • Aucun commentaire
wp-cli et Meta Box : générer un jeu de données pour un catalogue de pièces

wp catalogue generate --nombre=500 : avant de livrer un catalogue de pièces détachées à un client, encore faut-il pouvoir le tester avec un volume de données réaliste. Un formulaire de recherche qui fonctionne parfaitement avec cinq fiches produit peut se comporter très différemment une fois rempli de centaines d’entrées aux caractéristiques variées.

Meta Box, extension utilisée ici pour structurer les champs personnalisés du catalogue (référence, compatibilité véhicule, prix, stock), ne propose pas d’outil natif de génération de données de test. Une commande wp-cli personnalisée comble ce manque, en s’appuyant directement sur les fonctions d’enregistrement de champs de Meta Box.

Le problème : tester sans données réalistes

Sans jeu de données conséquent, plusieurs bugs restent invisibles avant la mise en production : un tri par prix qui casse dès que deux fiches partagent la même valeur, un filtre de compatibilité véhicule qui n’affiche rien au-delà d’une certaine longueur de liste, une pagination qui n’a jamais été testée au-delà de la première page.

Le snippet commenté

L'essentiel à retenir : Générer un jeu de données cohérent en une commande ; remplir des champs Meta Box par programmation ; variantes pour d'autres types de catalogues

La commande crée des fiches produit avec le type de contenu personnalisé du projet, puis remplit les champs Meta Box associés via rwmb_meta ou directement update_post_meta, en respectant le format attendu par chaque type de champ :

class Catalogue_Generate_Command {
    public function generate( $args, $assoc_args ) {
        $nombre = $assoc_args['nombre'] ?? 100;
        $marques = array( 'Bosch', 'Valeo', 'Febi', 'Continental' );

        for ( $i = 0; $i < $nombre; $i++ ) {
            $post_id = wp_insert_post( array(
                'post_type'   => 'piece_detachee',
                'post_title'  => 'Pièce test ' . wp_generate_uuid4(),
                'post_status' => 'publish',
            ) );

            update_post_meta( $post_id, 'reference', strtoupper( wp_generate_password( 8, false ) ) );
            update_post_meta( $post_id, 'marque', $marques[ array_rand( $marques ) ] );
            update_post_meta( $post_id, 'prix_ht', wp_rand( 5, 450 ) );
            update_post_meta( $post_id, 'stock_disponible', wp_rand( 0, 200 ) );
        }

        WP_CLI::success( sprintf( '%d fiches générées.', $nombre ) );
    }
}
WP_CLI::add_command( 'catalogue generate', array( new Catalogue_Generate_Command(), 'generate' ) );

Champs répétables et relations entre fiches

Meta Box gère aussi des champs répétables, par exemple une liste de véhicules compatibles associée à chaque pièce. Générer ce type de champ demande de respecter la structure de tableau attendue par Meta Box plutôt qu’une simple valeur scalaire :

$vehicules_compatibles = array();
for ( $j = 0; $j < wp_rand( 1, 5 ); $j++ ) {
    $vehicules_compatibles[] = array(
        'modele' => 'Modèle ' . chr( 65 + wp_rand( 0, 25 ) ),
        'annee'  => wp_rand( 2005, 2022 ),
    );
}
update_post_meta( $post_id, 'vehicules_compatibles', $vehicules_compatibles );

Nettoyer après le test

Une commande de génération mérite systématiquement sa contrepartie de nettoyage, pour ne pas laisser de fiches factices traîner jusqu’à la mise en production :

  • Marquer chaque fiche générée avec une métadonnée dédiée (_donnee_test) pour pouvoir les identifier sans ambiguïté.
  • Ajouter une commande wp catalogue nettoyer qui supprime uniquement les fiches portant cette métadonnée.
  • Ne jamais exécuter la commande de génération directement sur une base de production, même par erreur : une vérification de l’environnement en début de commande évite ce risque.

Variantes pour d’autres catalogues

La même structure de commande s’adapte à d’autres catalogues avec des champs Meta Box différents : un catalogue de matériel médical remplacerait la compatibilité véhicule par des normes de certification, un catalogue de mobilier remplacerait la marque par des dimensions et des matériaux. Seule la fonction de remplissage des métadonnées change, la structure de la commande wp-cli reste identique.

Un jeu de données de test qui ressemble trop peu à la réalité cache les mêmes bugs qu’une absence totale de données.

En résumé

Générer un jeu de données réaliste via une commande wp-cli personnalisée permet de tester un catalogue de pièces détachées dans des conditions proches de la production, avant toute livraison. Cette commande ne valide en rien la cohérence métier des données produites, qui reste de la responsabilité du client au moment de la recette fonctionnelle.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

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

Voir tous ses articles

Dans la même veine

À lire aussi