Alcune ottime risposte introduttive qui.
Fondamentalmente, get_template_part()
consente agli sviluppatori di temi di impostare un ordine di specificità dei file modello. Pensalo in modo simile alla specificità in quanto si applica ai selettori CSS. Quando si progetta qualcosa, si desidera iniziare con il minimo indispensabile di specificità, in modo che possa essere facilmente ignorato in parti di un progetto che richiedono attenzione individuale.
Ad esempio, stai disegnando un blog e crei un file loop.php che funziona bene per contrassegnare i post. Ma pianifichi in anticipo e lo chiami successivamente nei tuoi file modello con ulteriori specificatori di contesto: ad esempio, nella pagina dell'indice, chiami get_template_part( 'loop', 'index' );
, sul singolo modello, chiami get_template_part( 'loop', 'single' );
, nelle pagine di archivio, chiami get_template_part( 'loop', 'archive' );
e così via. Questo rende molto semplice quando decidi di contrassegnare il loop sulle tue pagine di archivio in modo diverso dalla home page: basta creare un modello loop-archive.php e verrà utilizzato anziché il generico loop.php .
Ma la magia dietro get_template_part()
è nella funzione locate_template()
, che controlla prima la directory del tema, quindi la directory principale (se presente) per il file denominato. Questo è molto utile per lo sviluppo di plugin. In uno dei miei plug-in, definisco un tipo di post personalizzato e ho creato un file modello di loop per quel tipo di post personalizzato nella mia directory dei plug-in. Ma ... Voglio consentire ai temi che usano il mio plugin di sovrascrivere il mio markup se lo desiderano. Questo è dove locate_template()
funziona davvero meraviglie.
locate_template($template_names, $load = false, $require_once = true )
cercherà ciascuno dei nomi nell'array $ template_names nella directory del foglio di stile, quindi nella directory template. Passare "true" come argomento $ load significa che richiederà il primo file trovato e restituirà una stringa vuota se non è stato individuato alcun file modello. Quindi posso fare qualcosa del genere nel mio plugin:
if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) )
include( 'loop-mycustomposttype.php' );
... che dovrebbe rendere molto semplice per gli sviluppatori di temi personalizzare il mio plugin semplicemente includendo un file chiamato loop-mycustomposttype.php nel loro tema.