vendredi 25 septembre 2026

À propos

Contact

Outils & workflow

wp scaffold : les générateurs WP-CLI que presque personne n’utilise

post-type, taxonomy, child-theme, block, plugin : WP-CLI sait générer un squelette de code correct en une commande. Voici ce que chacun produit vraiment.

Par Clément Hadrot • 24 septembre 2021 • 4 min de lecture • Aucun commentaire
wp scaffold : les générateurs WP-CLI que presque personne n'utilise

Un réflexe répandu chez les développeurs WordPress consiste à garder un vieux plugin personnel comme réserve de code à copier-coller à chaque nouveau projet : l’enregistrement d’un type de contenu, la déclaration d’une taxonomie, la structure d’un thème enfant. WP-CLI propose depuis longtemps une famille de commandes qui fait exactement ce travail, avec un code à jour et conforme aux conventions du cœur — la commande wp scaffold, étonnamment sous-utilisée dans les projets professionnels.

Ce tour d’horizon couvre cinq générateurs utiles au quotidien. Les tests générés automatiquement par certaines de ces commandes, destinés aux suites PHPUnit, répondent à un usage plus spécifique qui mérite un traitement séparé.

scaffold post-type

L'essentiel à retenir : Cinq générateurs scaffold couvrant les besoins courants d'un projet ; Le code produit respecte déjà les conventions WordPress ; Adapter le résultat plutôt que partir d'une page blanche

La commande la plus utilisée du groupe génère l’enregistrement complet d’un type de contenu personnalisé, prêt à coller dans un plugin ou un thème :

wp scaffold post-type produit --label=Produits --textdomain=mon-theme

Le résultat inclut les labels traduits, les arguments public, show_in_rest, supports, et surtout un hook correctement accroché à init — le genre de détail qu’on oublie facilement en écrivant à la main :

function mon_theme_produit_post_type() {
	$labels = array(
		'name'          => _x( 'Produits', 'Post Type General Name', 'mon-theme' ),
		'singular_name' => _x( 'Produit', 'Post Type Singular Name', 'mon-theme' ),
	);
	$args = array(
		'label'        => __( 'Produits', 'mon-theme' ),
		'labels'       => $labels,
		'public'       => true,
		'show_in_rest' => true,
	);
	register_post_type( 'produit', $args );
}
add_action( 'init', 'mon_theme_produit_post_type', 0 );

scaffold taxonomy

Même logique pour une taxonomie personnalisée, avec la liaison automatique au type de contenu concerné :

wp scaffold taxonomy categorie-produit --post_types=produit --textdomain=mon-theme

Le fichier généré déclare une taxonomie hiérarchique par défaut (comparable aux catégories natives). Pour une taxonomie non hiérarchique façon étiquettes, il suffit d’ajuster manuellement 'hierarchical' => false dans le résultat — le générateur ne propose pas ce choix en argument de ligne de commande, une limite à connaître avant de lancer la commande en pensant obtenir directement le bon comportement.

scaffold child-theme

Pour démarrer un thème enfant sur un thème existant, plutôt que de recréer style.css et functions.php à la main :

wp scaffold child-theme mon-theme-enfant --parent_theme=twentytwentyone \
    --theme_name="Mon Thème Enfant" --author="Clément Hadrot"

La commande crée un dossier complet avec l’en-tête de style correctement rempli et un functions.php qui enfile la feuille de style parente via wp_enqueue_style(), accroché au hook wp_enqueue_scripts — la méthode recommandée plutôt qu’un @import CSS, plus lent à charger.

scaffold block

Pour l’éditeur de blocs, la commande génère la structure minimale d’un bloc personnalisé, y compris le block.json :

wp scaffold block mon-bloc --title="Mon Bloc" --theme

L’option --theme place le bloc dans le thème actif plutôt que dans un plugin séparé. Le résultat inclut un squelette JavaScript d’enregistrement et un fichier PHP de rendu côté serveur, une base correcte pour un bloc simple, bien que les projets utilisant @wordpress/scripts et son propre outillage de build préfèrent souvent partir directement de @wordpress/create-block, plus complet pour un bloc en JavaScript pur.

scaffold plugin

Pour initialiser un plugin depuis zéro, avec en-tête conforme et structure de base :

wp scaffold plugin mon-plugin --plugin_name="Mon Plugin" \
    --plugin_author="Clément Hadrot" --plugin_description="Fonctionnalités internes"

Le fichier principal généré contient déjà l’en-tête standard reconnu par WordPress (Plugin Name, Version, Text Domain), une protection contre l’accès direct (defined( 'ABSPATH' ) || exit;), et une structure de dossiers cohérente — un point de départ nettement plus rapide qu’un fichier vide.

Ce que scaffold ne remplace pas

  • La logique métier réelle du plugin ou du bloc reste entièrement à écrire
  • Le code généré suit des conventions génériques, pas nécessairement le standard de codage spécifique d’une agence
  • Les champs personnalisés (ACF ou natifs) ne sont pas générés, seule la structure du type de contenu l’est

Je considère wp scaffold comme un point de départ, pas comme un livrable : le code généré évite les oublis classiques, mais il mérite toujours d’être relu et adapté aux conventions du projet en cours.

Pour aller plus loin

Ces générateurs restent peu utilisés en agence, souvent par simple méconnaissance de leur existence. Leur intérêt réel n’est pas de gagner du temps de frappe — un bon extrait de code personnel fait aussi bien — mais de garantir que la structure de base respecte les conventions du cœur WordPress, sans dépendre de la mémoire ou de l’ancienneté du snippet copié-collé d’un projet à l’autre.

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