
🛠️ Creare un tema WordPress da HTML: guida passo passo (parte 1)
Un sito HTML finito non deve essere buttato via quando passi a WordPress. Puoi prendere il tuo markup, index.html e style.css, e trasformarlo in un tema perfettamente funzionante in circa un'ora. Non è magia: WordPress è costruito su template PHP, che a loro volta sono assemblati a partire da HTML ordinario suddiviso in parti logiche.
Il problema è che la maggior parte dei tutorial o ti sommerge di terminologia fin dai primi paragrafi o dà tacitamente per scontato che tu conosca già PHP. Noi seguiremo un approccio diverso: partiremo da un mockup HTML concreto (header, contenuto, sidebar, footer) e, metodicamente, file dopo file, costruiremo un tema funzionante. Niente magia, solo codice e logica.
Alla fine di questa guida avrai un tema già pronto da caricare nel pannello di amministrazione di WordPress, attivare e vedere il tuo HTML dentro una piattaforma dinamica. Questa è la prima parte, le fondamenta. Nella seconda parte tratteremo i template di pagina singoli, i campi personalizzati e il customizer.
💡 Panoramica rapida:
- Assegna al tema un nome univoco e compila l'intestazione del file style.css: WordPress riconosce i temi da questi metadati.
- Taglia l'index.html originale in quattro file PHP: header.php, index.php, sidebar.php e footer.php.
- Implementa gli hook standard di WordPress (get_header, get_sidebar, get_footer, wp_head e wp_footer) in modo che la piattaforma «veda» e interpreti il tuo markup.
- Aggiungi il Loop di WordPress a index.php, lo snippet di codice che restituisce gli articoli del blog all'interno della tua struttura HTML.
- Crea un archivio ZIP, carica il tema nel pannello di amministrazione e attivalo: il tuo sito prende vita su WordPress.
1. Dare un nome al tema e al file style.css
La prima cosa da fare è assegnare al tema un nome univoco. Anche se realizzi il tema esclusivamente per il tuo sito, WordPress deve poterlo identificare in qualche modo nel pannello «Aspetto → Temi».
Condizioni di partenza:
- Hai un index.html e un foglio di stile style.css (o un qualsiasi altro file CSS).
- Hai un'installazione WordPress funzionante con almeno un tema standard, per esempio Twenty Twenty-Five.
- Hai già creato una cartella per il tuo futuro tema dentro
/wp-content/themes/.
Apri il tuo editor di codice (consigliamo Sublime Text o VS Code), copia il contenuto del tuo foglio di stile in un nuovo file e salvalo come style.css nella cartella del tema. In cima al file, prima di tutto il codice CSS, aggiungi il blocco dei metadati:
1 /* 2 Theme Name: My HTML-to-WordPress Theme 3 Theme URI: https://example.com 4 Description: Theme assembled from a static HTML layout. 5 Version: 1.0 6 Author: Your Name 7 Author URI: https://example.com 8 Tags: custom-theme, html-to-wordpress, beginner 9 */
Non rimuovere i simboli di commento /* e */: WordPress legge esattamente questi. Il campo Theme Name è quello chiave: è il nome con cui il tema apparirà nel pannello di amministrazione. Gli altri campi sono facoltativi, ma consigliamo di compilarli tutti, è una buona prassi.
Salva il file. A questo punto WordPress è già in grado di riconoscere il tuo tema, anche se è ancora vuoto e non fa nulla di utile.
2. Suddividere l'HTML in template PHP
Un tema WordPress classico è assemblato a partire da diversi file PHP, ciascuno responsabile di una propria sezione della pagina. La struttura più comune è header, contenuto, sidebar, footer. Se il tuo HTML è strutturato diversamente (per esempio sidebar a sinistra o due sidebar), il principio resta lo stesso: adatta la suddivisione alla tua struttura.
Crea quattro file vuoti nella cartella del tema:
header.php, intestazione del sitoindex.php, template principale, punto di assemblaggiosidebar.php, pannello lateralefooter.php, piè di pagina
Per ora sono vuoti, non aspettarti miracoli. Procediamo con ordine.
2.1 Header.php, intestazione del sito
Vai al pannello di amministrazione di WordPress, apri «Aspetto → Editor dei temi» e seleziona il tema standard (per esempio Twenty Twenty-Five). Trova il suo header.php e copia l'intero blocco <head>: è il set minimo di meta tag e hook senza il quale WordPress non funziona correttamente. Ecco cosa devi trasferire nel tuo header.php:
1 <head> 2 <meta charset="<?php bloginfo( 'charset' ); ?>"> 3 <meta name="viewport" content="width=device-width"> 4 <title><?php wp_title( '|', true, 'right' ); ?></title> 5 <link rel="profile" href="https://gmpg.org/xfn/11"> 6 <link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>"> 7 <?php wp_head(); ?> 8 </head>
La funzione bloginfo() sostituisce dinamicamente le impostazioni del sito (codifica, URL del pingback). L'hook wp_head() è critico: plugin e core di WordPress inseriscono attraverso di esso i propri script, stili e meta tag. Senza, il tema sarà mezzo morto.
Ora apri il tuo index.html originale e copia il codice dell'header, tutto ciò che è dentro <header> o un blocco simile, e incollalo in header.php **subito dopo il tag di chiusura </head> e il tag di apertura **<body>. Nel nostro markup dimostrativo si presenta così:
1 <body> 2 <header class="header"> 3 <p>This is header section. Put your logo and other details here.</p> 4 </header> 5
Aggiungi il collegamento al tuo foglio di stile tra i tag <head>:
1 <link rel="stylesheet" type="text/css" media="all" href="<?php echo get_template_directory_uri(); ?>/style.css" />
La funzione get_template_directory_uri() restituisce l'URL della cartella del tuo tema: il percorso al CSS funzionerà su qualsiasi server senza bisogno di hardcoding. Salva header.php.
2.2 Index.php, punto di assemblaggio
index.php in WordPress è un file obbligatorio. Non contiene markup in quanto tale, ma assembla la pagina a partire da più parti. Apri il tuo index.php vuoto e aggiungi tre righe:
1 <?php get_header(); ?> 2 3 <?php get_sidebar(); ?> 4 <?php get_footer(); ?>
La prima riga include header.php. Le ultime due, sidebar.php e footer.php, vanno in fondo. Il contenuto principale (area contenuti e Loop, ne parleremo nella prossima sezione) sarà inserito tra di esse.
Copia il blocco con la classe .content (area del contenuto principale) dal tuo index.html originale e incollalo tra get_header() e get_sidebar():
1 <?php get_header(); ?> 2 3 <div class="content"> 4 <p>This is the main content area.</p> 5 </div><!-- .content --> 6 7 <?php get_sidebar(); ?> 8 <?php get_footer(); ?> 9
Lo schema è semplice: WordPress assembla la pagina in sequenza dall'alto verso il basso, header, contenuto, sidebar, footer. Ogni get_*() richiama il file PHP corrispondente.
2.3 Sidebar.php e footer.php
La sidebar e il footer sono molto semplici. Copia il contenuto dei blocchi .sidebar e .footer dal tuo index.html nei rispettivi file PHP.
sidebar.php:
1 <aside class="sidebar"> 2 <p>This is the side bar</p> 3 </aside> 4 5 <?php dynamic_sidebar( 'sidebar' ); ?> 6
La funzione dynamic_sidebar() restituisce i widget assegnati nel pannello di amministrazione («Aspetto → Widget»). Se la sidebar non serve, cancella questa riga.
footer.php:
1 <footer class="footer"> 2 <p>And this is the footer.</p> 3 </footer> 4 5 <?php wp_footer(); ?> 6 </body> 7 </html> 8
Nota: </body> e </html> sono spostati in footer.php. Nel tuo HTML originale probabilmente sono anche loro in fondo, ed è giusto così. L'hook wp_footer() è obbligatorio tanto quanto wp_head(): senza, molti plugin e WordPress stesso non funzionano (per esempio la barra di amministrazione non compare).
3. Il Loop di WordPress: visualizzare gli articoli
Il tema è assemblato, la struttura funziona. Ma l'area del contenuto è ancora statica, con testo hardcoded dall'HTML originale. Perché WordPress inizi a visualizzare veri articoli del blog, ti serve Il Loop, un costrutto PHP speciale che itera tra gli articoli pubblicati e li mostra uno per uno dentro il tuo markup.
Questo è il pezzo di codice più importante del tema. Va in index.php, dentro il blocco <div class="content">, in sostituzione del testo segnaposto statico:
1 <?php if ( have_posts() ) : ?> 2 <?php while ( have_posts() ) : the_post(); ?> 3 <article <?php post_class(); ?>> 4 <header class="post-header"> 5 <time datetime="<?php echo get_the_date( 'c' ); ?>"> 6 <?php echo get_the_date(); ?> 7 </time> 8 <h2> 9 <a href="<?php the_permalink(); ?>" rel="bookmark"> 10 <?php the_title(); ?> 11 </a> 12 </h2> 13 <span class="post-author"><?php the_author(); ?></span> 14 </header> 15 16 <div class="entry"> 17 <?php if ( has_post_thumbnail() ) : ?> 18 <?php the_post_thumbnail( 'medium' ); ?> 19 <?php endif; ?> 20 <?php the_content(); ?> 21 <?php edit_post_link( 'Edit', '<span class="edit-link">', '</span>' ); ?> 22 <?php wp_link_pages(); ?> 23 </div> 24 25 <footer class="post-footer"> 26 <?php comments_popup_link( 27 'Leave a comment', 28 '1 comment', 29 '% comments' 30 ); ?> 31 </footer> 32 </article> 33 <?php endwhile; ?> 34 35 <nav class="navigation"> 36 <div class="prev-posts"><?php next_posts_link( '← Previous posts' ); ?></div> 37 <div class="next-posts"><?php previous_posts_link( 'Newer posts →' ); ?></div> 38 </nav> 39 <?php else : ?> 40 <p>No posts found.</p> 41 <?php endif; ?> 42
Come funziona:
have_posts()verifica se ci sono articoli da mostrare. Se ce ne sono, entra nel Loop.the_post()prepara i dati per l'articolo successivo.post_class()aggiunge classi CSS standard a<article>, utili per stilizzare tipi di post diversi.the_permalink()ethe_title()restituiscono l'URL e il titolo dell'articolo.the_content()è il corpo vero e proprio dell'articolo.the_post_thumbnail()è la miniatura dell'articolo, se impostata.comments_popup_link()è il link ai commenti.next_posts_link()eprevious_posts_link()gestiscono l'impaginazione.
Il blocco else si attiva quando non ci sono affatto articoli, mostrando un messaggio segnaposto.
Dopo aver inserito il Loop, il tuo index.php completo si presenta così:
1 <?php get_header(); ?> 2 3 <div class="content"> 4 <?php if ( have_posts() ) : ?> 5 <?php while ( have_posts() ) : the_post(); ?> 6 <article <?php post_class(); ?>> 7 <header class="post-header"> 8 <time datetime="<?php echo get_the_date( 'c' ); ?>"> 9 <?php echo get_the_date(); ?> 10 </time> 11 <h2> 12 <a href="<?php the_permalink(); ?>" rel="bookmark"> 13 <?php the_title(); ?> 14 </a> 15 </h2> 16 <span class="post-author"><?php the_author(); ?></span> 17 </header> 18 <div class="entry"> 19 <?php if ( has_post_thumbnail() ) : ?> 20 <?php the_post_thumbnail( 'medium' ); ?> 21 <?php endif; ?> 22 <?php the_content(); ?> 23 <?php edit_post_link( 'Edit', '<span class="edit-link">', '</span>' ); ?> 24 <?php wp_link_pages(); ?> 25 </div> 26 <footer class="post-footer"> 27 <?php comments_popup_link( 28 'Leave a comment', 29 '1 comment', 30 '% comments' 31 ); ?> 32 </footer> 33 </article> 34 <?php endwhile; ?> 35 <nav class="navigation"> 36 <div class="prev-posts"><?php next_posts_link( '← Previous posts' ); ?></div> 37 <div class="next-posts"><?php previous_posts_link( 'Newer posts →' ); ?></div> 38 </nav> 39 <?php else : ?> 40 <p>No posts found.</p> 41 <?php endif; ?> 42 </div><!-- .content --> 43 44 <?php get_sidebar(); ?> 45 <?php get_footer(); ?> 46
4. Compilare e installare il tema
Tutti e cinque i file (style.css, header.php, index.php, sidebar.php e footer.php) devono trovarsi nella cartella del tuo tema (chiamala, per esempio, my-html-theme). Comprimi la cartella in un archivio ZIP.
Poi, lo scenario standard: amministrazione WordPress → «Aspetto» → «Temi» → «Aggiungi tema» → «Carica tema». Seleziona il file ZIP, clicca «Installa», poi «Attiva». Visita il sito: il tuo mockup HTML ha preso vita dentro WordPress e gli articoli del blog vengono visualizzati nell'area del contenuto.
Qui si conclude la prima parte. Ora hai una struttura di tema funzionante: WordPress la riconosce, aggancia gli hook e restituisce contenuto dinamico attraverso il Loop. Nella prossima parte tratteremo i template di pagina singoli (single.php, page.php), la gerarchia dei template e l'inclusione degli script tramite functions.php.
⁉️🤔 Domande frequenti
Devo conoscere PHP per costruire un tema a partire da HTML?
No. Il minimo che scriverai sono poche chiamate a funzione come
get_header()e un Loop di 15 righe. Tutto il resto è copiare codice HTML che già possiedi. Qui PHP fa da «collante», non da linguaggio principale. Se capisci dove<?php ?>si apre e si chiude, è sufficiente per iniziare.
E se il mio mockup HTML non ha l'aspetto «header-contenuto-sidebar-footer»?
Il principio non cambia. WordPress assembla la pagina richiamando in sequenza i file PHP: il loro ordine in index.php determina il layout. Se la tua sidebar è a sinistra, ti basta chiamare
get_sidebar()prima del blocco del contenuto. Due sidebar? Creasidebar-left.phpesidebar-right.phpcon chiamate separate. Lo schema è flessibile.
Posso creare un tema senza sidebar?
Sì, e il compito diventa ancora più semplice. Basta rimuovere la chiamata
<?php get_sidebar(); ?>daindex.phpe non creare il filesidebar.php. Molti temi moderni, inclusi i temi a blocchi di WordPress, funzionano del tutto senza sidebar.
È obbligatorio usare esattamente header.php, index.php, sidebar.php e footer.php?
index.phpestyle.csssono obbligatori: senza, WordPress non vede il tema. Gli altri file sono facoltativi. Maheader.php,sidebar.phpefooter.phpsono lo standard de facto per i temi classici: tutti gli sviluppatori li conoscono e le funzioniget_header(),get_sidebar()eget_footer()sono pensate per loro. Per il tuo primo tema, attieniti a questo set di quattro.
Questo approccio funziona con i temi a blocchi (FSE)?
No, questa guida è per i temi PHP classici, che sono ancora vivi e supportati (WordPress non li ha abbandonati e non ha in programma di farlo). I temi a blocchi (Full Site Editing) usano template HTML e un file theme.json. Se il tuo obiettivo è trasformare rapidamente HTML esistente in un tema funzionante, l'approccio classico è sensibilmente più semplice: meno astrazioni, modello familiare «header-contenuto-sidebar-footer».
Qual è il prossimo passo: il tuo primo passo nello sviluppo di temi
Hai assemblato una struttura di tema di base a partire da markup HTML, con un Loop funzionante, hook inclusi e contenuto dinamico. Il tema si installa già nel pannello di amministrazione e restituisce gli articoli. Ora ci sono due direzioni di crescita:
- Se visualizzare gli articoli nel tuo markup ti basta, popola il sito di contenuti e rifinisci il CSS per adattarlo al tuo brand.
Inizia in piccolo: costruisci il tema seguendo questa guida, attivalo e aggiungi un paio di articoli di prova. Quando vedrai il tuo HTML con articoli veri al suo interno, tutto il resto verrà più facile.



