Come usare get_template_part ()?


25

Qualcuno potrebbe spiegarmi come funziona questa funzione? So cosa fa ma quando guardo il codice sorgente nel template twenty_ten, non capisco come tutti i loop vengano raccolti in un singolo loop.php (ho visto anche quel file).

Ad esempio, come si può sottrarre una certa parte comune del modello e riutilizzarla su altri modelli?


Risposte:


25

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.


2
Sostituisci Locate_template con questo, per favore. include(locate_template( 'loop-mycustomposttype.php')) In questo modo è possibile passare variabili. Ho trovato questo link qui . È estremamente utile!
Pablo SG Pacheco,

1
In questo modo sarà necessario cambiare anche questo. In questo modoif ( false === include(locate_template( 'loop-mycustomposttype.php')) )
Pablo SG Pacheco il

1
Oh, buon punto. Con la formula che ho dato, la chiamata requireo require_once(da locate_template) è all'interno di una funzione e quindi non ha accesso all'ambito corrente.
Goldenapples,

5

Non tutti i loop, il loop principale. ;-) Non importa se guardi la tua prima pagina o una categoria o se sai cosa, avrai sempre un ciclo principale. Il contenuto di quel ciclo principale è determinato dalla query che è stata eseguita prima che il tuo modello venisse chiamato affatto.

Il modello loop.php si limita a scorrere sugli elementi nel ciclo e li formatta. Vedi la documentazione sul Codex .

Se guardi il loop.php di Twenty-Ten, puoi vedere che Twenty-Ten si diversifica in quel singolo file modello.

get_template_part()carica semplicemente una parte del modello e la attraversa. Puoi anche estrarre parti del tuo loop.php in file separati e sostituirli con una get_template_part('loop', 'category')e così via per le chiamate.

Oppure potresti avere un modello di parte per ogni singolo post nel loop e far sì che il tuo loop.php chiami solo get_template_part('loop','post');all'interno della while...clausola. Dipende interamente da te.


3

Dal codice get_template_part :

<?php get_template_part( 'loop', 'index' ); ?>

farà un PHP request () per il primo file esistente ...

Funzionerà così efficacemente come se avessi bisogno di un altro file php.

Aggiornamento : c'è una leggera differenza da 'richiedere': è racchiuso in una funzione, quindi è necessario globalse si desidera passare eventuali variabili dal modello alla parte del modello.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.