From atum-cms-ecom
Scaffold un projet WordPress 6.x moderne (block theme FSE + plugin custom + dev environment)
npx claudepluginhub arnwaldn/atum-plugins-collection --plugin atum-cms-ecom# /wordpress-setup — WordPress 6.x Project Scaffold ## USAGE ## DESCRIPTION Scaffold un projet WordPress 6.x production-ready pour l'agence ATUM. Trois types de projets supportés : - **`block-theme`** (défaut) — thème Full Site Editing avec `theme.json`, templates HTML, parts, patterns - **`plugin`** — plugin custom avec structure PSR-4, activation/desactivation/uninstall, Gutenberg blocks - **`full`** — thème + plugin compagnon, environnement dev `wp-env` configuré, CI GitHub Actions Tous les scaffolds incluent la checklist sécurité (nonces, capabilities, kses, i18n) et respectent l...
/wordpress-setupConnects to a WordPress site via WP-CLI or REST API using provided [domain] or by prompting for the site URL.
/wordpress-setup <project-name>
/wordpress-setup <project-name> --type=block-theme
/wordpress-setup <project-name> --type=plugin
/wordpress-setup <project-name> --type=full --with-woocommerce
Scaffold un projet WordPress 6.x production-ready pour l'agence ATUM. Trois types de projets supportés :
block-theme (défaut) — thème Full Site Editing avec theme.json, templates HTML, parts, patternsplugin — plugin custom avec structure PSR-4, activation/desactivation/uninstall, Gutenberg blocksfull — thème + plugin compagnon, environnement dev wp-env configuré, CI GitHub ActionsTous les scaffolds incluent la checklist sécurité (nonces, capabilities, kses, i18n) et respectent les WordPress Coding Standards.
| Flag | Défaut | Description |
|---|---|---|
--type=block-theme|plugin|full | block-theme | Type de scaffold |
--with-woocommerce | false | Déclare la compatibilité HPOS + hooks de base |
--namespace=<Ns> | Atum\\<ProjectName> | Namespace PSR-4 pour les plugins |
--text-domain=<td> | <project-name> | Textdomain i18n |
--wp-version=<6.x> | 6.6 | Version WordPress minimale requise |
--php-version=<8.x> | 8.1 | Version PHP minimale requise |
--dry-run | — | Affiche la structure sans créer les fichiers |
Avant de créer quoi que ce soit, Claude Code vérifie :
--force pour overwrite)wp-content/themes/ ou wp-content/plugins/ parent)node, npm, composer, wp (WP-CLI optionnel mais recommandé)block-themeCrée la structure FSE complète :
<project-name>/
├── style.css # Header avec "Theme Name", "Version", "Text Domain"
├── theme.json # Settings : color palette, typography, spacing
├── functions.php # Enqueue, add_theme_support, load_theme_textdomain
├── templates/
│ ├── index.html # Template par défaut
│ ├── single.html # Post individuel
│ ├── page.html # Page individuelle
│ ├── archive.html # Archives
│ ├── 404.html # Erreur 404
│ └── search.html # Résultats de recherche
├── parts/
│ ├── header.html
│ └── footer.html
├── patterns/
│ ├── hero.php # Pattern hero section
│ └── cta.php # Pattern call-to-action
├── assets/
│ ├── css/
│ │ └── editor.css # Styles additionnels éditeur
│ ├── js/
│ └── fonts/
├── languages/
│ └── <text-domain>.pot # Généré via wp i18n make-pot
├── screenshot.png # 1200x900 placeholder
└── readme.txt # Release notes
Contenu de theme.json : palette de 3 couleurs, font family Inter, spacing scale, 4 font sizes, appearanceTools: true pour activer padding/margin/gap sur tous les blocs.
Contenu de functions.php : enqueue discipline, add_theme_support pour wp-block-styles, editor-styles, align-wide, responsive-embeds, custom-units, chargement du textdomain, cleanup de wp_head (remove emoji, shortlink, etc.).
pluginCrée un plugin moderne avec namespace et Composer :
<project-name>/
├── <project-name>.php # Fichier principal avec header plugin
├── composer.json # PSR-4 autoload
├── uninstall.php # Cleanup DB options/meta
├── readme.txt # README pour wordpress.org
├── src/ # Classes PSR-4
│ ├── Plugin.php # Classe principale (singleton)
│ ├── Activator.php # Hook activation (dbDelta)
│ ├── Deactivator.php # Hook désactivation (cleanup cron)
│ ├── Admin/
│ │ └── SettingsPage.php
│ ├── Rest/
│ │ └── Controller.php # Routes REST
│ └── Blocks/
│ └── BlockRegistry.php # Enregistrement des blocs
├── blocks/
│ └── example/ # Un bloc de départ
│ ├── block.json
│ ├── edit.js
│ ├── save.js
│ ├── style.scss
│ └── editor.scss
├── assets/
│ ├── css/
│ └── js/
├── tests/ # PHPUnit + Brain Monkey
│ └── PluginTest.php
├── languages/
│ └── <text-domain>.pot
└── .github/
└── workflows/
└── ci.yml # PHPCS + PHPUnit
Contenu de composer.json :
{
"name": "atum/<project-name>",
"description": "<project-name> plugin by ATUM",
"type": "wordpress-plugin",
"license": "GPL-2.0-or-later",
"require": { "php": ">=8.1" },
"require-dev": {
"phpunit/phpunit": "^10",
"brain/monkey": "^2.6",
"wp-coding-standards/wpcs": "^3.0"
},
"autoload": { "psr-4": { "Atum\\<ProjectName>\\": "src/" } },
"autoload-dev": { "psr-4": { "Atum\\<ProjectName>\\Tests\\": "tests/" } },
"scripts": {
"lint": "phpcs --standard=WordPress src/",
"test": "phpunit"
},
"config": { "allow-plugins": { "dealerdirect/phpcodesniffer-composer-installer": true } }
}
fullCombine block-theme + plugin dans un monorepo + ajoute :
wp-env configuré via .wp-env.json (WordPress + le thème + le plugin montés)wp i18n make-pot)make install, make start, make test, make pot--with-woocommerceSi activée (sur plugin ou full) :
Activator.php :add_action('before_woocommerce_init', function () {
if (class_exists('\Automattic\WooCommerce\Utilities\FeaturesUtil')) {
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility(
'custom_order_tables',
__FILE__,
true
);
}
});
woocommerce/archive-product.php dans le thème si type fullwoocommerce dans le tableau des dépendances plugin (Requires Plugins header)Après création des fichiers, le command :
cd <project-name>composer install (si plugin/full)npm install && npm run build (si blocs)wp-env start (si full)composer run lint (PHPCS)composer run test (PHPUnit)/wordpress-setup mon-agence
Crée mon-agence/ avec block theme standard.
/wordpress-setup lead-capture --type=plugin --namespace=Atum\\LeadCapture
Crée un plugin avec structure PSR-4, namespace Atum\LeadCapture.
/wordpress-setup boutique-client --type=full --with-woocommerce
Crée un monorepo boutique-client/ avec thème + plugin compagnon + compat HPOS + wp-env configuré.
wp-scripts et le build des blocs)wp i18n make-pot, scaffolding secondaire)--php-version)Le scaffold ne crée jamais :
theme.json (sauf si explicitement demandé)uninstall.phpdbDeltapermission_callback et argsblock.json (API v3)wp_enqueue_*)Une fois le scaffold en place, les prochaines étapes doivent être déléguées à :
wordpress-expert (ce plugin) pour écrire la logique métierwordpress-patterns (ce plugin) pour les patterns sécuriséswoocommerce-patterns (ce plugin) pour les customisations e-commercesecurity-reviewer (atum-reviewers) pour le security audit finale2e-testing pour les tests Playwright post-scaffold