Prompt per sviluppare un tema WordPress child con Claude Code
Come usarlo. Compila la tabella «Dati del progetto», adatta le decisioni già prese e quelle aperte, poi incolla tutto in una nuova sessione di Claude Code avviata dalla cartella del progetto. Il metodo è sempre lo stesso: un piano a fasi, uno sviluppatore e un validatore separati, controlli automatici che decidono quando una fase è finita e la produzione intoccabile fino al tuo via.
Dati del progetto
| Campo | Valore |
|---|---|
| Sito | [nome e URL del sito] |
| Tema padre | [per esempio Blocksy, con la versione; indica se hai l'estensione Pro] |
| Nome e text domain del nuovo tema | [per esempio miotema_2026] |
| Prefisso dei blocchi | [per esempio miotema/] |
| Tema attuale | [nome del tema in uso: da studiare, non da evolvere] |
| Riferimento grafico approvato | [dove si trova: immagini, file di design, guida di stile] |
| Token di design | [font per titoli, testo ed etichette; colori per testo, testo secondario, sfondi, linee, accento, sezioni scure] |
| Copia locale del sito | [percorso dei file del sito, uploads compresi] |
| Dump del database | [percorso e data] |
| Server di produzione | [accesso SSH con WP-CLI, solo lettura; le credenziali restano in un file locale fuori dal repository] |
| Versioni di produzione | [PHP e WordPress] |
| Repository | [utente o organizzazione GitHub e nome proposto] |
| Lingua di commenti e documentazione | [italiano] |
Obiettivo
Costruisci il nuovo tema di [nome del sito] a partire dal riferimento grafico approvato. Il risultato atteso è un tema WordPress nuovo, child theme di [tema padre], sviluppato e testato in locale con wp-env, versionato in un nuovo repository Git, con un solo comando di controllo che fa da cancello per ogni merge, pronto per il go-live. Quando hai finito faccio io un test in locale; se è tutto a posto do il via e portiamo tutto in produzione.
Lavora in autonomia fino alla fine. Prima di iniziare puoi farmi domande o propormi miglioramenti sulle decisioni aperte (sezione «Decisioni aperte»): fallo in un solo messaggio, poi parti e non fermarti più se non per questioni che non puoi decidere da solo o per azioni distruttive.
Prima del codice: il piano
Studia il riferimento grafico, la copia locale del sito e il tema attuale, poi scrivi nel repository docs/PIANO.md con:
- la struttura del tema e cosa resta al tema padre;
- l'elenco dei blocchi, con nome, attributi, dove si usano e da dove prendono i dati;
- i template che servono davvero e quelli che restano del padre;
- le fasi di lavoro, ciascuna con i suoi criteri di verifica.
Nel messaggio iniziale riassumi il piano insieme alle domande e alle proposte sulle decisioni aperte. Dopo la mia risposta il piano è approvato: parti e vai fino in fondo.
Vincoli non negoziabili
- Tema nuovo, child theme di [tema padre], cartella e text domain
[nome del tema]. Non si modifica il tema padre e non si evolve il tema attuale (puoi riportare da lì solo ciò che serve davvero). Non si modifica nessun plugin. - Al tema padre restano header, footer e tutte le opzioni del Customizer (palette, tipografia, costruttori di header e footer, opzioni dell'articolo, sidebar, barra di lettura, eventuali blocchi di contenuto del padre). Il tema aggancia e sovrascrive solo dove il padre non arriva. Niente
!importantcontro il tema padre: dove c'è un'opzione si usa l'opzione. - Componenti Gutenberg su misura: ogni sezione con una struttura precisa è un blocco dinamico con
block.json(apiVersion3) erender.php, build con@wordpress/scripts, registrazione dablocks-manifest.php. L'elenco dei blocchi è nel piano. Ogni blocco deve essere anche inseribile a mano dall'editor, con una descrizione che dice cosa contiene e dove si usa. - Template PHP nel child, solo dove il padre non basta (di solito home, articolo, pagine, allegati, 404, commenti). I template chiamano i blocchi con
do_blocks()orender_block(), come una volta condo_shortcode(). I testi che vorrò cambiare senza toccare il PHP non stanno negli attributi hard-coded ma in una pagina «Home» o in opzioni del sito lette dal template. - SEO e dati strutturati intatti: titoli, meta, canonical, breadcrumb, schema JSON-LD e FAQ del plugin SEO non si toccano; il tema può cambiarne solo l'aspetto. Se il tema mostra un indice suo, usa le stesse ancore di quello del plugin, così i link già condivisi continuano a funzionare.
- Grafica coerente con il riferimento approvato: stessi token (vedi «Dati del progetto») come custom property in
style.css, collegati alla palette del tema padre; stesse proporzioni. Font serviti in locale, mai da servizi esterni. Animazioni solo leggere (comparsa allo scroll conIntersectionObserver, hover in CSS),prefers-reduced-motionrispettato. - Performance: CSS e JS solo dove servono (caricamento condizionale per template e per blocco), nessun jQuery, immagini con
srcset,loading="lazy"tranne l'immagine LCP,fetchpriority="high"sulla copertina, preload dei font, nessun layout shift, HTML semantico con un solo H1. Obiettivo misurabile: Lighthouse mobile con Performance, Accessibility, Best Practices e SEO almeno a 95 sulle pagine chiave, Core Web Vitals verdi. Conta anche il lavoro che il PHP evita: misura le query di ogni template e togli quelle inutili. - Best practice WordPress: WordPress Coding Standards (phpcs), PHPStan al livello 6 o più, escaping e sanitizzazione in ogni
render.php,wp_ksesper l'HTML, nonce sui form,WP_Queryconno_found_rowse cache dei meta solo quando servono, cache oggetti per le query ripetute con l'ultima modifica degli articoli nella chiave (si invalida da sola), i18n con il text domain, accessibilità (focus visibile, menu e finestre usabili da tastiera e chiusi con Esc, contrasti AA). - Regole di codice: pensa prima di scrivere, scrivi il minimo codice che risolve il problema, nessuna astrazione per codice usato una sola volta, modifiche chirurgiche, commenti sul perché e non sul cosa. Codice e identificatori in inglese, commenti e documentazione in [lingua].
- Produzione intoccabile durante lo sviluppo: sul server solo letture (dump del DB, download di immagini,
wp option get). Niente upload, niente attivazioni, niente cache svuotate finché non do il via.
Ambiente di sviluppo: wp-env
- Usa
@wordpress/envcon un.wp-env.jsonnel repository che monti il tema dal repository e, dalla copia locale, il tema padre, i plugin, i mu-plugin e gli uploads (conmappings, senza duplicarli). Allinea PHP e WordPress alle versioni di produzione. - Database: importa il dump e fai il
search-replacedegli URL. Se serve un dump più fresco lo fai tu dal server, in sola lettura. Il dump e le credenziali non entrano mai nel repository. - Velocità: se il sito locale impiega più di un secondo a pagina, risolvi prima questo (su Windows con Docker spesso basta servire WordPress da una copia dentro il container). Con tempi alti Lighthouse misura il disco, non il tema.
- Licenze: se il tema padre ha un'estensione Pro, attivala in locale e impedisci alla copia di parlare con il server delle licenze al posto del sito vero (blocca le chiamate in uscita verso quel servizio e spegni il cron).
- Plugin di cache disattivati in locale; gli altri plugin restano quelli della copia.
Repository e controlli
- Crea un nuovo repository privato con
gh repo create. Contiene solo il tema, con.gitignore(node_modules,vendor, file.enve, se decidi di generarla al deploy,build),README.md(cos'è, come si avvia wp-env, come si fa la build, come si pubblica),CHANGELOG.mde licenza GPL-2.0-or-later come WordPress. - Si lavora sempre su un branch per fase; in
mainsi entra solo con una pull request che ha superato i controlli. - Un solo comando,
npm run check, esegue in locale:- phpcs con WPCS e PHPCompatibility per la versione PHP di produzione, e PHPStan;
- lint di JavaScript e CSS e build dei blocchi;
- un controllo dei contrasti sulle coppie di colori dei token;
- PHPUnit su blocchi e funzioni del tema, dentro wp-env;
- Playwright con test end-to-end su desktop e telefono delle pagine chiave (home, un articolo con FAQ e commenti, una pagina, un allegato, la 404), con axe per l'accessibilità e nessun errore in console;
- Lighthouse mobile sulle pagine chiave, con la mediana di più corse e le soglie del vincolo 7.
- Il comando fallisce se una soglia non è rispettata: è la condizione di arresto di ogni fase. Se una misura oscilla solo per il carico della macchina (di solito la Performance in locale sulle pagine più pesanti), trasformala in avviso, tieni come errori le altre categorie e i Core Web Vitals e scrivi il perché.
- I controlli devono controllare davvero: per esempio il test di accessibilità fallisce se le regole valutate sono troppo poche. Un test verde che non verifica niente è peggio di un test rosso.
- L'esito di
npm run checkva nella descrizione di ogni pull request. Una CI su GitHub Actions con gli stessi controlli è facoltativa (vedi «Decisioni aperte»).
Processo per fase: sviluppatore e validatore
Lavora per fasi, nell'ordine del piano. Per ogni fase:
- Criteri prima del codice: all'inizio della fase scrivi i criteri di accettazione in
docs/fasi/N-nome.md(cosa deve esserci e come si verifica). - Sviluppo su un branch
fase/N-nome, affidato a un sub-agente sviluppatore. Pull request con descrizione, esito dinpm run checke screenshot desktop (1440 px) e mobile (390 px) delle pagine toccate, accanto al riferimento grafico. - Validazione da un agente validatore: lancia un sub-agente nuovo (non un fork, così non eredita le tue convinzioni) a cui passi la PR, i criteri di accettazione, il riferimento grafico della pagina e questo elenco di vincoli. Il validatore deve: leggere il diff, eseguire
npm run check, aprire le pagine in wp-env e confrontarle con il riferimento, controllare escaping, accessibilità, performance e aderenza grafica, e restituire un verdettoOKoppureKOcon l'elenco puntuale dei problemi (file, riga, cosa non va, cosa ci si aspetta). - Se
KO, l'elenco torna allo sviluppatore, che corregge e aggiorna la PR; poi si rivalida con un validatore nuovo. Si itera finché il validatore diceOKe il controllo è verde. Se lo stesso punto rimbalza per più di cinque giri, scrivilo indocs/DISACCORDI.mdcon le due posizioni, vai avanti con il resto e riportamelo nel messaggio finale. - Merge in
maine registrazione inCHANGELOG.md.
Se puoi scegliere i modelli, usa un modello veloce per lo sviluppatore e il modello più capace che hai per il validatore.
Fasi tipiche (da adattare nel piano):
| Fase | Cosa | Verifica |
|---|---|---|
| 0 | Repository, wp-env, npm run check vuoto ma verde, import del DB, licenze | wp-env start pulito; sito identico all'attuale con il solo tema padre |
| 1 | Pelle: token, font locali, header e footer dal Customizer | stessi contenuti, cambia solo l'aspetto; Lighthouse uguale o migliore |
| 2 | Articolo: template, sidebar, blocchi di fine articolo, FAQ, commenti | su tre articoli diversi (con e senza FAQ, con una o più categorie, con e senza commenti), desktop e mobile |
| 3 | Home: blocchi e template | aderente al riferimento; testi modificabili senza PHP |
| 4 | Pagine, archivi, allegati, 404 | aderenti al riferimento; pagine esistenti corrette senza lavoro manuale |
| 5 | QA finale: tastiera, contrasti, prefers-reduced-motion, query, Lighthouse, documentazione, lista per il go-live | tutti i criteri delle fasi precedenti, controllo verde su main |
Dopo il go-live ogni ritocco è una fase nuova, con lo stesso giro.
Decisioni già prese (non rimetterle in discussione)
[Elenca qui le scelte chiuse. Esempi: stile chiaro, niente variante notturna; sezioni della home e il loro ordine; cosa non deve esserci; commenti in una finestra <dialog> aperta con showModal(), visibili anche senza JavaScript, con l'URL #comment-123 che apre la finestra; box autore largo quanto la griglia.]
Decisioni aperte (proponi la tua scelta nel messaggio iniziale, poi procedi)
- Contenuti ripetuti, come una CTA per categoria: blocchi di contenuto del tema padre (si gestiscono a clic, stanno nel database) o PHP nel tema (codice versionato e controllato).
- Chi sceglie gli articoli in evidenza o da leggere dopo: un selettore nel blocco o un'opzione del sito.
- Indice dell'articolo: un blocco del tema con le stesse ancore del plugin SEO, oppure l'indice del plugin spostato in sidebar.
- Commenti: nativi o servizio esterno.
- Pagine degli allegati: redirect all'articolo oppure un template dedicato con
noindex. - Cartella
build/nel repository o generata al momento del deploy. - CI su GitHub Actions oppure solo
npm run checkin locale. - Nome del repository.
Configurazione del tema padre e lista per il go-live
Tutte le configurazioni del tema padre (palette, font locali, header e footer, opzioni dell'articolo, sidebar, barra di lettura, eventuali blocchi di contenuto) le fai tu in locale, e in produzione si rifanno al mio via. Perciò, man mano che le fai, annotale in docs/GO-LIVE.md in forma eseguibile: esportazione del Customizer salvata in docs/export/ e aggiornata a ogni fase, più comandi wp option o passi manuali per tutto quello che l'esportazione non copre (widget, menu, impostazioni dei plugin, opzioni create dal tema, pagina Home impostata come front page).
GO-LIVE.md deve essere una checklist completa e ordinata:
- Backup di produzione prima di tutto: dump del DB, archivio del tema attuale, esportazione del Customizer e delle opzioni che cambierai, con il comando esatto per il ripristino.
- Caricamento del tema (senza
node_modules, conbuild/), attivazione, import del Customizer, configurazioni elencate, pagina Home. - Svuotamento delle cache e verifica automatica: home, alcuni articoli, una pagina, un allegato e la 404 rispondono; titolo, meta description, canonical, immagine social, robots e schema della home identici a prima;
.htaccessinvariato; sitemap erobots.txtraggiungibili; Lighthouse sul sito vero. - Rollback in poche righe: riattivare il tema precedente, reimportare il Customizer, ripristinare il DB se serve.
Prova la sequenza in locale con uno script che ricostruisce il sito da un dump fresco ed esegue gli stessi passi, fermandosi al primo errore.
Questa lista la eseguiremo insieme dopo il mio test in locale: tu la prepari e la provi in wp-env, ma in produzione non tocchi nulla senza il mio via esplicito.
Consegna finale
Quando tutte le fasi sono in main con il controllo verde, scrivimi un unico messaggio con: il comando per avviare wp-env e l'URL locale con utente e password di test; l'elenco delle pagine da guardare e cosa controllare; le decisioni prese sulle questioni aperte; gli eventuali punti in docs/DISACCORDI.md; le decisioni che restano a me, in un elenco numerato a cui posso rispondere punto per punto; il link a GO-LIVE.md. Poi aspetti il mio test e il mio via.


