"Packaging WordPress automatique. Activer quand : (1) Claude termine une modification ou un ajout de code (PHP, CSS, JS, HTML) dans un projet WordPress détecté à la racine (plugin avec 'Plugin Name:' ou thème avec 'Theme Name:' dans le header) — que ce soit via une commande codebloom OU une demande directe de l'utilisateur sans commande ; (2) l'utilisateur demande de packager, zipper, ou préparer pour distribution. Flow autonome : détecter → bumper version → zipper → vérifier. Ne pas activer si aucun fichier PHP/CSS/JS/HTML n'a été modifié ou ajouté dans la session, ni pour des projets non-WordPress."
Install
npx skillscat add vendeesign/codebloom/wp-pack Install via the SkillsCat registry.
WP Pack — Packaging WordPress
Ce skill s'active :
- Automatiquement quand Claude termine une modification de code (fichiers PHP, CSS, JS, HTML, templates) et qu'un projet WordPress est détecté — avec ou sans commande codebloom
- Sur demande quand l'utilisateur demande de packager, zipper ou préparer pour distribution
Le zip est TOUJOURS généré automatiquement après une modification ou un ajout de code. Ne JAMAIS demander "Tu veux le zip ?" — le faire directement.
Étape 1 — Détection auto : Plugin ou Thème
1a. Type et fichier principal
| Type | Détection |
|---|---|
| Plugin | Fichier PHP contenant Plugin Name: dans le header |
| Thème | style.css contenant Theme Name: dans le header |
Chercher d'abord à la racine. Si rien trouvé → chercher dans les sous-dossiers directs (1 niveau).
1b. Slug (CRITIQUE)
Le slug détermine le nom du dossier racine dans le zip. Un mauvais slug = deux plugins sur le site WordPress.
Déterminer le slug dans cet ordre de priorité :
Text Domain:dans le header du fichier principal (source la plus fiable)- Nom du fichier PHP principal sans extension (ex:
adn-tag.php→adn-tag) - Dernier recours : nom du dossier contenant le fichier principal
RÈGLE ABSOLUE : le slug dans le zip doit être identique à celui déjà installé sur le site WordPress. Ne JAMAIS inventer, transformer ou dériver un slug autrement (pas de conversion . → -, pas de slugification du nom du plugin, etc.).
RÈGLE STRUCTURE : le dossier racine dans le zip doit toujours être {slug}/. Ne JAMAIS changer la structure interne du zip (pas de dossier racine renommé, pas de fichiers déplacés, pas de réorganisation). Un changement de structure = double plugin dans WordPress à l'activation.
1c. Structure
| Structure | Détection | Dossier source |
|---|---|---|
| Racine | Le fichier principal est à la racine du projet | . (racine) |
| Sous-dossier | Le fichier principal est dans un sous-dossier | Le sous-dossier |
Afficher avant de continuer :
Type : Plugin / Thème
Slug : {slug}
Source : {chemin du dossier source}Étape 2 — Bump de version
Lire la version actuelle
Chercher la version dans le fichier principal détecté à l'étape 1.
Déterminer l'incrément
| Source | Bump | Exemple |
|---|---|---|
/feature, /todo ideas |
minor (0.X.0) | 1.2.3 → 1.3.0 |
/fix, /quick, /clean, /todo go |
patch (0.0.X) | 1.2.3 → 1.2.4 |
| Demande directe de l'utilisateur | demander | patch / minor / major / custom |
| Breaking change explicite | major (X.0.0) | 1.2.3 → 2.0.0 |
Règles semver :
- major (X.0.0) : remet minor et patch à 0
- minor (0.X.0) : remet patch à 0
- patch (0.0.X) : incrémente seulement
Quand le bump est auto-déterminé : afficher la version choisie et enchaîner directement.
Fichiers à mettre à jour
Mettre à jour seulement les fichiers qui existent :
| Type | Fichiers | Champ |
|---|---|---|
| Plugin | PHP principal | Version: dans le header |
| Plugin | readme.txt |
Stable tag: |
| Plugin | PHP principal ou includes | define('..._VERSION', '...') ou const VERSION = '...' |
| Thème | style.css |
Version: dans le header |
| Thème | functions.php |
define('..._VERSION', '...') ou const VERSION = '...' |
| Thème | readme.txt (si existe) |
Stable tag: |
Étape 3 — Supprimer les anciens zips
- Supprimer
{slug}.zipdans le dossier courant et le dossier parent (s'il existe) - Supprimer aussi les anciens zips versionnés (
{slug}-*.zip) - Si aucun ancien zip → passer directement à l'étape 4
Étape 4 — Créer le zip
Utiliser le script wp-pack.js du plugin. Ne JAMAIS écrire de commande zip/PowerShell inline, et ne JAMAIS créer de script temporaire (build-zip.sh, package.ps1, etc.).
Commande
node "${CLAUDE_PLUGIN_ROOT}/hooks/wp-pack.js" --source "{chemin_dossier_source}" --slug "{slug}" --output "{chemin_output}/{slug}.zip"Arguments :
--source: chemin absolu du dossier contenant le code plugin/thème (racine ou sous-dossier)--slug: le slug détecté à l'étape 1b (détermine le nom du dossier racine dans le zip)--output: chemin absolu du zip de sortie
Emplacement du zip :
- Structure racine → le zip va dans le dossier source :
{source}/{slug}.zip - Structure sous-dossier → le zip va dans le dossier parent (racine projet) :
{parent}/{slug}.zip
Le script gère automatiquement :
- Windows : PowerShell
Compress-Archivevia fichier .ps1 temporaire (pas de problème d'échappement) - macOS/Linux : commande
zip - Renommage du dossier : si le dossier source a un nom différent du slug, le zip contient quand même
{slug}/comme racine - Exclusions :
.git,node_modules,*.md,.claude/,plans/,*.zip, etc. (liste complète dans le script) readme.txtest toujours inclus (ce n'est pas un.md)
Étape 5 — Vérification
Contenu du zip
Lister le contenu résumé et vérifier :
- Présence du fichier principal (PHP header ou
style.css) - Absence de fichiers dev (
.git/,node_modules/,.env) - Dossier racine dans le zip = slug
Résumé
Type : Plugin / Thème
Slug : {slug}
Version : {version} (depuis {ancienne-version})
Zip : {slug}.zip ({taille})
Fichiers : {nombre} fichiersCas particuliers
vendor/ (Composer)
- Si
composer.jsonexiste avec une sectionautoload→vendor/est inclus automatiquement - Si
vendor/n'existe pas maiscomposer.jsona un autoload → signaler : "vendor/ manquant — lancercomposer install --no-dev"
Build step détecté
- Si
package.jsoncontient des scriptsbuild,compile, oudist→ signaler : "Build step détecté — vérifier que les assets sont à jour"
Traductions (languages/)
- Toujours inclues si le dossier existe
Pas de readme.txt
- Ne pas en créer
- Signaler uniquement si plugin destiné à WordPress.org
Comportement
- TOUJOURS zipper après une modification ou un ajout de code dans un projet WordPress — ne JAMAIS demander "Tu veux le zip ?", le faire directement
- Utiliser
wp-pack.js— ne JAMAIS écrire de commandes zip/PowerShell inline, ne JAMAIS créer de scripts (build-zip.sh,package.ps1, etc.) - Auto-bumper la version selon la commande source (minor pour feature, patch pour fix/quick/clean)
- Re-zip sans bump quand appelé depuis
/push— sauter l'étape 2, exécuter 3→5 - Enchaîner sans interruption : suppression → zip → vérification
- Signaler les anomalies (vendor manquant, build step, taille > 10 MB) sans bloquer
- Ne pas modifier la structure du projet
- Ne pas créer de
readme.txt,LICENSE, ou autres fichiers manquants