Venerdì 13 novembre 2026 Scuola WP sarà al Contributor Day del WordCamp Pisa. Avremo due aule a disposizione per tutta la giornata, pensate per chi vuole muovere i primi passi con WordPress senza alcuna esperienza. Al mattino ci saranno tre workshop in sequenza: dalla bacheca al primo contenuto, dalla creazione del primo articolo e della homepage con i blocchi fino alla personalizzazione di colori, font e struttura del sito. Nel pomeriggio ci saranno tavoli di domande e pratica.
I posti nello spazio formazione sono 30 e per partecipare serve il biglietto Conferenza + Contributor Day, indicando Scuola WP quando ti viene chiesto cosa vuoi fare il venerdì. Non devi installare nulla: porta il tuo PC con il caricabatterie e lavoreremo direttamente dal browser, su WordPress Playground. Ti aspettiamo a Pisa per imparare insieme.
I blocchi hanno la reputazione di essere complicati. Troppi file di configurazione, troppi tutorial del 2019, troppa magia npm. Ma è ancora così? In questo tutorial ti mostro che il percorso da una cartella vuota a un Dynamic Block funzionante richiede circa 5 minuti. Nessuna conoscenza pregressa, nessun file di configurazione infinito: solo l’essenziale per iniziare subito.
Perché è importante adesso
C’è un altro motivo per cui vale la pena capire le basi. Se hai usato strumenti AI per generare blocchi, avrai notato che usano tutti lo stesso tooling: create-block, wp-scripts, block.json, render.php. Anche se un LLM scrive il codice al posto tuo, devi comunque capire cosa sta facendo. Ed è esattamente lo scopo di questo corso.
Cos’è un Dynamic Block?
Un Static Block salva il suo output HTML direttamente nel database. Quello che si vede nell’editor è esattamente quello che viene memorizzato.
Un Dynamic Block funziona diversamente. Salva solo gli attributi, cioè le impostazioni configurate dall’utente. L’HTML effettivo viene generato da PHP a ogni caricamento della pagina. L’output è sempre aggiornato.
Nessun save.js necessario. Solo un file render.php. Per la maggior parte dei casi d’uso reali, è esattamente quello che serve.
WordPress fornisce uno strumento ufficiale di scaffolding: create-block. Tre comandi, e si ottiene un plugin blocco funzionante con un setup di build moderno:
npx @wordpress/create-block@latest my-block --variant=dynamic
cd my-block
npm start
Nessuna configurazione Webpack, tutto è gestito da wp-scripts.
Dopo lo scaffolding, la struttura del plugin si presenta così:
my-block/
├── block.json # Definizione e metadati del blocco
├── src/
│ ├── index.js # Registrazione lato client
│ ├── edit.js # Componente UI per l'editor
│ ├── editor.scss # Stili editor (opzionale)
│ └── style.scss # Stili frontend (opzionale)
├── build/ # Output compilato (generato)
│ ├── index.js
│ ├── index.css
│ └── render.php
├── my-block.php # File principale del plugin
└── package.json # Dipendenze npm e script
I quattro file fondamentali:
block.json è il manifesto, la fonte di verità del blocco. index.js registra il blocco lato client. edit.js è un componente React che controlla l’aspetto del blocco nell’editor. render.php è dove avviene la magia sul frontend: rendering server-side con PHP.
block.json: il manifesto del blocco
Per i Dynamic Block, il campo più importante è render:
Questa singola riga dice a WordPress: non cercare una funzione save in JavaScript, renderizza questo blocco con PHP. È l’intera differenza tra un blocco statico e uno dinamico.
index.js: registrazione lato client
import Edit from './edit';
import metadata from './block.json';
registerBlockType(metadata.name, {
edit: Edit,
});
Cosa fa: importa i metadati da block.json, importa il componente Edit, e chiama registerBlockType(). Non c’è nessuna proprietà save, perché il rendering è gestito da render.php.
edit.js: React nell’editor
Il file edit.js è un componente React. Tre cose da ricordare:
useBlockProps(): va sempre applicato con spread sull’elemento root. È il modo in cui WordPress applica classi e stili corretti. InspectorControls: per aggiungere un pannello di impostazioni nella sidebar. setAttributes(): da chiamare ogni volta che l’utente modifica qualcosa.
Questo è il pattern. Una volta visto, si può costruire qualsiasi UI per l’editor.
render.php: sempre aggiornato
Il file render.php viene eseguito a ogni caricamento della pagina. Tre cose da sapere:
$attributes: contiene tutto ciò che l’utente ha configurato nell’editor. get_block_wrapper_attributes(): genera il markup wrapper corretto. Da usare sempre. esc_html(): per fare l’escape dell’output. Sempre.
<?php
/**
* PHP file to use when rendering the block.
*/
?>
<p <?php echo get_block_wrapper_attributes(); ?>>
<?php echo esc_html( $attributes['message'] ?? 'Hello World' ); ?>
</p>
Block Supports: non costruire ciò che WordPress ti dà gratis
Invece di costruire color picker, font size control e spacing UI personalizzati, basta dichiarare nella block.json quello che serve:
WordPress genera i controlli nell’editor e applica gli stili nel frontend automaticamente, nell’editor e nel frontend.
Cosa offre ogni Block Support?
Color: color picker per testo e sfondo, verifica contrasto. Typography: selettore dimensione font, controllo altezza riga. Spacing: controlli per margine e padding.
Nessun build step, nessun npm, nessun node_modules. Il blocco appare nell’editor tramite ServerSideRender. Per i casi d’uso più semplici, è un’opzione solida.
Bonus: autoRegister (WordPress 7.0)
WordPress 7.0 introduce il flag autoRegister. Quando lo si imposta su true nei supports, il blocco PHP appare automaticamente nell’editor. E WordPress genera i controlli Inspector dalle definizioni degli attributi:
Per fornire le migliori esperienze, utilizziamo tecnologie come i cookie per memorizzare e/o accedere alle informazioni del dispositivo. Il consenso a queste tecnologie ci permetterà di elaborare dati come il comportamento di navigazione o ID unici su questo sito. Non acconsentire o ritirare il consenso può influire negativamente su alcune caratteristiche e funzioni.
Funzionale
Sempre attivo
L'archiviazione tecnica o l'accesso sono strettamente necessari al fine legittimo di consentire l'uso di un servizio specifico esplicitamente richiesto dall'abbonato o dall'utente, o al solo scopo di effettuare la trasmissione di una comunicazione su una rete di comunicazione elettronica.
Preferenze
L'archiviazione tecnica o l'accesso sono necessari per lo scopo legittimo di memorizzare le preferenze che non sono richieste dall'abbonato o dall'utente.
Statistiche
L'archiviazione tecnica o l'accesso che viene utilizzato esclusivamente per scopi statistici.L'archiviazione tecnica o l'accesso che viene utilizzato esclusivamente per scopi statistici anonimi. Senza un mandato di comparizione, una conformità volontaria da parte del vostro Fornitore di Servizi Internet, o ulteriori registrazioni da parte di terzi, le informazioni memorizzate o recuperate per questo scopo da sole non possono di solito essere utilizzate per l'identificazione.
Marketing
L'archiviazione tecnica o l'accesso sono necessari per creare profili di utenti per inviare pubblicità, o per tracciare l'utente su un sito web o su diversi siti web per scopi di marketing simili.