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 unico loop.php (ho visto anche quel file).

Quindi, come si fa, ad esempio, ad astrarre una certa parte comune del modello e poi riutilizzarla in altri modelli?

Commenti

Risposta

Alcune risposte introduttive molto buone qui.

Fondamentalmente, get_template_part() consente agli sviluppatori di temi di impostare un ordine di specificità dei file modello. Pensalo in modo simile a 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 sovrascritto in parti di un progetto che richiedono unattenzione individuale.

Ad esempio , stai “modificando lo stile di un blog e crei un ciclo .php che funziona bene per contrassegnare i post. Ma pianifichi in anticipo e in seguito lo chiami nei file modello con specificatori di contesto aggiuntivi: ad esempio, nella pagina dellindice, 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 facile lungo la strada quando decidi di contrassegnare il loop sulle tue pagine di archivio in modo diverso dalla home page: crea semplicemente un loop-archive.php e verrà “utilizzato al posto del generico loop.php .

Ma la magia dietro get_template_part() sta nella funzione locate_template(), che controlla prima la directory del tema, poi la directory principale (se uno esiste) per il file denominato. Questo è molto utile per lo sviluppo di plug-in. In uno dei miei plug-in, ho definito 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 per consentire ai temi che utilizzano il mio plugin di sovrascrivere il mio markup se lo desiderano. È qui che locate_template() fa davvero miracoli.

locate_template($template_names, $load = false, $require_once = true ) 

cercherà ciascuno dei nomi nellarray $ template_names nella directory del foglio di stile, quindi nel file temp directory in ritardo. Passare “true” come argomento $ load significa che richiederà il primo file trovato e restituirà una stringa vuota se non è stato trovato alcun file modello. Quindi posso fare qualcosa del genere nel mio plug-in:

if ( "" === locate_template( "loop-mycustomposttype.php", true, false ) ) include( "loop-mycustomposttype.php" ); 

… che si spera dovrebbe rendere molto facile per gli sviluppatori di temi personalizzare il mio plug-in semplicemente includendo un file chiamato loop-mycustomposttype.php nel loro tema.

Commenti

  • Sostituisci locate_template con questo, per favore. include(locate_template( 'loop-mycustomposttype.php')) In questo modo è possibile passare variabili. ' ho trovato questo link . ' è estremamente utile!
  • In questo modo ' sarà necessario cambiare anche questo. Come questo if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
  • Oh, buon punto. Con la formula che ho fornito, la chiamata require o require_once (da locate_template) è allinterno una funzione e quindi ' non ha accesso allambito corrente.

Risposta

Non tutti i cicli, il ciclo principale. 😉 Non importa se guardi la tua prima pagina o una categoria o chi sa cosa, avrai sempre un ciclo principale. Il contenuto di quel ciclo principale è determinato dalla query che è stata eseguita prima il tuo modello è stato chiamato affatto.

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

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

get_template_part() carica semplicemente una parte del modello e la esegue. Puoi anche estrarre parti del tuo loop.php in file separati e sostituiscili con get_template_part("loop", "category") e così via.

Oppure potresti avere un modello parziale per ogni singolo post nel ciclo e fai in modo che il tuo loop.php chiami solo get_template_part("loop","post"); allinterno della clausola while.... Dipende tutto da te.

Risposta

Dal get_template_part codex :

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

eseguirà un require () PHP per il primo file esistente …

Funzionerà così efficacemente come se stessi richiedendo un altro file php.

Aggiorna : cè una leggera differenza in “require”: è racchiuso in una funzione quindi è necessario global se si desidera passare qualsiasi variabile dal modello alla parte del modello.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *