Gerarchia dei Template: dubbi tra index.php, front-page.php, home.php
Sono davvero confuso tra index.php
, home.php
e front-page.php
. In molti casi anche se avevo un index.php
, l'ho sovrascritto con front-page.php
. Ma recentemente, sono venuto a conoscenza di home.php
.
- Qual è la differenza tra
home.php
eindex.php
? - Qual è la condizione ideale per utilizzare
home.php
invece diindex.php
? - Qual è la condizione ideale per utilizzare
front-page.php
? - Quando uso
front-page.php
, quale compito specifico svolge alloraindex.php
?
Ho letto la Gerarchia dei Template nel Codex. Per favore non confondere la mia domanda con i Template delle Pagine, quelli li ho capiti, alHamduLILLAH.

La logica della pagina frontale è una delle funzionalità più confuse in WordPress ed è eccezionalmente difficile da spiegare e riassumere. Come menzionato in un commento tempo fa, ho bruciato una quantità sacrilega di tempo per mettere insieme il mio cheat sheet sulla logica della pagina frontale.
Ma dato che questo è un thread popolare, lasciami provare a rispondere a quelle domande molto specifiche che avevi.
Qual è la differenza tra
home.php
eindex.php
?
home.php
è il template per l'indice degli articoli (archivio del tipo di contenuto nativo Post, che è un caso speciale in WP). WP cercherà di utilizzarlo per l'indice degli articoli, che siano visualizzati alla radice del sito o in una pagina dedicata agli articoli.
index.php
è il template universale. È l'ultima scelta in tutti i rami della gerarchia dei template e verrà selezionato quando nient'altro si adatta, sia per le viste di archivio che per quelle singole.
Solo l'indice degli articoli può usare home.php
, ma tutti gli altri contesti potrebbero e utilizzeranno index.php
.
Qual è la condizione ideale per usare un
home.php
invece di unindex.php
?
Usi home.php
per personalizzare l'indice degli articoli.
Usi index.php
per fornire il template più generico nel tuo tema, adatto alla visualizzazione di qualsiasi cosa.
Alcuni temi scelgono di avere un index.php
vuoto e assicurarsi di avere template più specifici per tutti i casi possibili, così che non debba mai essere utilizzato.
Qual è la condizione ideale per usare un
front-page.php
?
front-page.php
viene utilizzato per l'indice degli articoli alla radice o per la pagina frontale statica, se abilitata.
È un template ad alta priorità, quindi se un tema lo include non puoi selezionare un template arbitrario per la pagina frontale statica. Per questo motivo è quasi mai incluso nei temi rilasciati pubblicamente (il che è corretto).
Il miglior utilizzo è in progetti privati, poiché è più facile da configurare rispetto a un template di pagina.
Quando sto usando un
front-page.php
, allora quale compito specifico svolge per me unindex.php
?
index.php
è ancora un template universale per tutti gli altri casi.
Se usi una pagina frontale statica (a cui si applicherà front-page.php
), allora la tua pagina degli articoli cercherà di utilizzare home.php
e poi index.php
.

Il file front-page.php
è il template della pagina iniziale del sito. Verrà sempre utilizzato per la pagina iniziale del tuo sito, indipendentemente dal fatto che get_option( 'show_on_front' )
sia impostato su page
o posts
.
Il template home.php
è il template dell'indice degli articoli del blog. Verrà sempre utilizzato per visualizzare l'indice degli articoli del blog, indipendentemente dal fatto che l'indice sia visualizzato sulla pagina iniziale del sito o su una pagina diversa.
Nel caso in cui esistano sia front-page.php
che home.php
, e get_option( 'show_on_front' )
sia impostato su posts
(ovvero, la pagina iniziale del sito mostra l'indice degli articoli del blog), il file front-page.php
avrà la precedenza sul file home.php
.
Il file index.php
è il template di fallback predefinito per tutti i contesti nella Gerarchia dei Template. Viene utilizzato solo se non esiste un template più specifico per il contesto corrente.
La gerarchia dei template per la pagina iniziale del sito è:
front-page.php
- Se
'page' == get_option( 'show_on_front' )
: gerarchia delle pagine - Se
'posts' == get_option( 'show_on_front' )
: gerarchia dell'indice degli articoli del blog
La gerarchia dei template per l'indice degli articoli del blog è:
home.php
index.php
La gerarchia dei template per le pagine è:
- Template personalizzato della pagina
page-{slug}.php
page-{id}.php
page.php
index.php

Tutto ciò deriva da un'attenta lettura della Gerarchia dei Template.
home.php
viene utilizzato se:
- La pagina iniziale del tuo sito è impostata per visualizzare un elenco di articoli, oppure
- È impostata una pagina statica come front page, e
- Un visitatore accede alla pagina che hai definito come "elenco di articoli" (es.
http://example.com/blog/
)
- E il tema ha un file
home.php
Se l'ultima condizione non è soddisfatta — cioè, se non esiste un file home.php
nel tema — allora verrà caricato index.php
.
front-page.php
verrà utilizzato se:
- È impostata una pagina statica come front page, e
- Un visitatore accede alla pagina che hai definito come "pagina statica iniziale" (es.
http://example.com/
), e - Il tema ha un file
front-page.php
Se l'ultima condizione non è soddisfatta — cioè, se non esiste un file front-page.php
nel tema — allora verrà caricato index.php
.
In sintesi
Se vuoi personalizzare il tuo elenco di articoli, utilizza home.php
.
Se vuoi personalizzare la tua pagina statica iniziale, utilizza front-page.php
.

In breve:
index.php
è un template di fallback, utilizzato solo quando non viene trovato un template più appropriatohome.php
viene utilizzato per il blog (un elenco di post recenti)front-page.php
viene utilizzato per la landing-page
Il template universale index.php
Il file template index.php
è un template di fallback. Viene utilizzato come ultima risorsa quando non è disponibile nessun altro template più appropriato. Ad esempio, se non hai un front-page.php
né un home.php
, allora verrà utilizzato index.php
. Lo stesso vale per i template mancanti come archive.php
o single.php
e così via.
Differenza tra front-page.php
e home.php
La differenza tra i template front-page.php
e home.php
è che front-page.php
viene utilizzato, come suggerisce il nome, come pagina principale del sito, mentre home.php
è destinato alla sezione Blog.
Quale template verrà utilizzato per la landing-page del mio sito?
Il template front-page.php
, se presente, verrà utilizzato per la pagina principale del sito (es. http://www.example.com/
). Se non presente, verrà invece utilizzato home.php
. Se mancano entrambi i template front-page.php
e home.php
, verrà utilizzato il template di fallback index.php
.
Quale template verrà utilizzato per la pagina del blog?
WordPress ti consente di avere una pagina "Blog" (che elencherà i post recenti) su una pagina diversa dalla landing-page (es. http://www.example.com/blog/
). Quindi, se questo è il caso del tuo sito, la pagina del Blog utilizzerà sempre il template home.php
. Se home.php
non esiste, verrà utilizzato il template di fallback index.php
.
Come configurare la landing-page e la pagina del blog?
Per configurare quale contenuto mostrare sulla tua pagina principale, vai su WordPress Admin, sotto Strumenti > Lettura, lì puoi configurare "La tua home page visualizza" per mostrare una pagina statica o i tuoi ultimi post.
Nel caso tu scelga di visualizzare una pagina statica sulla home page, avrai anche la possibilità di impostare quale pagina utilizzare come segnaposto per la pagina del Blog (che utilizzerà il template home.php
):

tratto da Gerarchia dei template di WordPress
Visualizzazione della Home Page
Per impostazione predefinita, WordPress imposta la home page del tuo sito per visualizzare gli ultimi articoli del blog. Questa pagina è chiamata indice degli articoli. Puoi anche impostare i tuoi articoli del blog per essere visualizzati su una pagina statica separata. Il file template home.php viene utilizzato per visualizzare l'indice degli articoli del blog, sia che venga utilizzato come pagina frontale che su una pagina statica separata. Se home.php non esiste, WordPress utilizzerà index.php.
- home.php
- index.php
Nota: Se esiste front-page.php, avrà la precedenza sul template home.php.
Visualizzazione della Pagina Frontale
Il file template front-page.php viene utilizzato per visualizzare la pagina frontale del tuo sito, sia che la pagina frontale mostri l'indice degli articoli del blog (menzionato sopra) o una pagina statica. Il template della pagina frontale ha la precedenza sull'indice degli articoli del blog (home.php). Se il file front-page.php non esiste, WordPress utilizzerà home.php o page.php a seconda della configurazione in Impostazioni → Lettura. Se nessuno di questi file esiste, verrà utilizzato il file index.php.
1. front-page.php – Utilizzato sia per "i tuoi ultimi articoli" che per "una pagina statica" come impostato nella sezione di visualizzazione della pagina frontale di Impostazioni → Lettura.
2. home.php – Se WordPress non trova front-page.php e "i tuoi ultimi articoli" è impostato nella sezione di visualizzazione della pagina frontale, cercherà home.php. Inoltre, WordPress cercherà questo file quando la pagina degli articoli è impostata nella sezione di visualizzazione della pagina frontale.
3. page.php – Quando "pagina frontale" è impostata nella sezione di visualizzazione della pagina frontale.
4. index.php – Quando "i tuoi ultimi articoli" è impostato nella sezione di visualizzazione della pagina frontale ma home.php non esiste o quando la pagina frontale è impostata ma page.php non esiste.
Come puoi vedere, ci sono molte regole su quale percorso segue WordPress. Utilizzare il grafico sopra è il modo migliore per determinare cosa verrà visualizzato da WordPress.
Grafico della gerarchia dei template:

Ho deciso di testare quale template viene utilizzato per ognuna delle seguenti pagine quando vengono impostate le diverse opzioni di visualizzazione della pagina iniziale.
- example.net
- example.net/home/
- example.net/blog/
I risultati sono piuttosto lunghi, ma possono essere utilizzati come riferimento o come cheat-sheet.
Fonte: In che modo differiscono i template front-page.php e home.php in WordPress?
Nota per l'editor: Ho provato a copiare e incollare le tabelle qui ma è richiesto il formato markdown invece dell'HTML. Per favore converti in markdown se possibile.
