Come includere e richiedere file e modelli in WordPress

Quando si parla di PHP, molti sviluppatori adorano la lingua, molti sviluppatori odiano la lingua e molti sviluppatori in genere la usano solo per fare il loro lavoro.

Per quello che vale, sono di quest'ultimo campo. Penso che PHP va bene. Come qualsiasi cosa, non è senza i suoi problemi, ma mi piace lavorare con esso abbastanza bene e vederlo come un modo per portare a termine il lavoro rispetto ad un linguaggio a torta nel cielo per qualche tempo di utopia di sviluppo.

Il fatto è che una delle cose che lo sviluppatore ama di PHP - le sue caratteristiche e flessibilità - sono proprio le cose che spesso ci fanno inciampare. L'elenco è lungo, ma nel mondo WordPress, uno dei punti più comuni di confusione è il modo corretto di includere file esterni.

PHP offre quattro (!) Modi per farlo e WordPress offre persino una sua variante.

In questo articolo, esamineremo i quattro modi in cui PHP offre di includere i file, le linee guida su quando usarli e esamineremo le funzionalità di WordPress per includere i file.


Compresi i file con PHP

In generale, i file con PHP si riferiscono all'azione di includere un altro script nel contesto dello script su cui stai lavorando.

Si può pensare a ciò importando un file in modo tale che quando il file viene restituito dal server, gli script vengono combinati insieme nell'ordine in cui sono inclusi e quindi interpretati come un singolo file.

In primo luogo, esamineremo i modi per includere i file in PHP e le implicazioni di ciascuno. Alla fine dell'articolo, esamineremo quando dovremmo farlo.

includere()

Secondo il manuale PHP:

include () includerà e valuterà il file specificato. Se il file non viene trovato, verrà lanciato un avviso PHP.

In poche parole, ciò significa che PHP cercherà il file che stai tentando di includere. Se viene trovato, verrà aggiunto al tuo script nel posto esatto in cui lo hai dichiarato.

Questo è importante da capire. Ad esempio, supponiamo che tu stia scrivendo un insieme di funzioni che dipendono da un insieme precedente di funzioni. In tal caso, dovrai assicurarti che l'altro file sia incluso per primo.

D'altra parte, se stai cercando di inserire una serie di funzioni o un file esterno nel mezzo di una funzione esistente, puoi includerla esattamente nel punto in cui ti serve.

In secondo luogo, si noti che se il file è mancante, PHP genererà un avviso. A seconda della configurazione del server, è possibile visualizzare questo rendering sul browser o visualizzarlo in un file di registro (o entrambi).

Tuttavia, gli avvertimenti sono proprio questo: non sono considerati fatali e in genere non interrompono l'esecuzione, ma sono importanti da notare perché generalmente implica che parte del tuo lavoro non viene caricata e / o interpretata correttamente.

Infine, nota che quando un file viene caricato usando includere() che avrà accesso a tutte le variabili precedentemente definite nello script esistente.

Ad esempio, supponiamo che stai lavorando a una funzione ea metà strada della funzione, includerai un file separato. Quel file separato avrà accesso alle variabili definite in precedenza nella funzione in cui è incluso.

Sebbene sia possibile visualizzarlo in modo conveniente, rende lo script esterno un po 'poco chiaro in quanto non mostra necessariamente che dipende da variabili definite esternamente. Questo può essere fonte di confusione, specialmente quando si lavora con una squadra.

include_once ()

Preso direttamente dal manuale PHP:

include_once () eseguirà lo stesso comportamento di include () ma non includerà di nuovo il file se è già stato incluso.

Ovviamente, non c'è bisogno di passare tanto tempo a parlare dei punti generali di include_once (), ma ci sono alcuni fattori chiave di differenziazione tra come include_once () funziona e come includere() lavori.

Primo, mentre include_once () esegue in gran parte lo stesso di includere(), lo farà non ti permettono di includere nuovamente lo script. Ciò significa che se da qualche altra parte nel tuo progetto, è stato incluso un file esterno, ecco fatto la posizione definitiva in cui quel file è stato incluso.

Quindi qual è il vantaggio di questo? Oltre a garantire che ci sia solo un posto in cui uno script è incluso, assicura anche che le variabili e le funzioni non vengano necessariamente ridefinite. Ricordalo quando lo usi includere(), gli script hanno accesso a funzioni e variabili che sono definite sopra di loro.

Se si sceglie di definire un nuovo set di variabili o funzioni in un file, includerlo in un altro script e non uso include_once (), quindi corri il rischio di ridefinire funzioni e variabili che potenzialmente potrebbero causare grossi problemi con l'esecuzione del tuo codice.


Richiedere file con PHP

Richiedere file è simile a includere i file in quanto è un altro modo in cui è possibile includere uno script nello script che si sta scrivendo attualmente, ma comporta un insieme delle proprie implicazioni su errori e sicurezza.

Sebbene tu possa considerare l'atto di richiedere un file più o meno nello stesso modo in cui puoi includere un file, implica il fatto che è più forte, cioè il file esterno è necessario per l'esecuzione.

Come vedremo, questo è esattamente questo caso.

richiedere()

Ancora una volta, direttamente dal manuale PHP:

require () esegue lo stesso di include () ma genera un errore fatale di PHP se il file non viene trovato.

Quindi ecco la cosa con richiedere(): eseguirà la stessa azione di includere() per quanto riguarda l'importazione dello script esterno nel contesto di quello su cui stai lavorando, ma se non riesce a localizzare il file, genera un errore e interrompe completamente l'esecuzione.

Ciò significa che l'applicazione si interrompe. Con includere(), riceverai un avvertimento e tenterà di andare avanti.

A un certo livello, può sembrare che il bisogno di file sia il la giusta strada da percorrere Dopo tutto, perché vorresti rischiare di includere qualcosa solo per avere un avviso con un potenziale errore nell'applicazione.

Ma tutto si riduce alla natura di ciò su cui stai lavorando. A volte, i semplici avvisi PHP sono a posto - come dimenticare di inizializzare l'indice di un array - altre volte è necessario un errore.

Non ci sono regole dure e veloci per quando usare questo contro include, ma pensa in modo critico alla natura di ciò che stai facendo e alle implicazioni che esso comporta se fallisse.

require_once ()

Infine, dal manuale PHP:

require_once () esegue lo stesso di require () ma non includerà il file una seconda volta se è già incluso.

Questo è probabilmente il più facile da capire poiché abbiamo trattato le ultime tre funzioni in dettaglio relativo. In poche parole, require_once () esegue esattamente le stesse funzioni richieste, anche se non tenterà di includere di nuovo un file se è già caricato nel tuo script.


Regole empiriche

Oltre a pensare in modo critico attraverso quale funzione è meglio per la natura del tuo progetto, qui ci sono due regole empiriche da considerare quando si lavora con includere() e richiedere():

  • require_once () è migliore per i siti più grandi in quanto svolge un lavoro aggiuntivo al livello inferiore che influisce sulla sicurezza e sulle prestazioni
  • include_once () è più veloce ed è generalmente ritenuto accettabile per i siti più piccoli

Abbastanza facile, ma per quanto riguarda le funzioni di aiuto di WordPress?


Compreso i file con WordPress

Con tutto ciò detto, lì siamo modi migliori rispetto all'utilizzo includere() e richiedere() per includere modelli nei progetti WordPress.

Supponiamo, ad esempio, di avere diversi file di loop, uno per un formato di post:

  • loop-standard.php
  • loop-image.php
  • loop-quote.php

E devi includerli single.php ogni volta che lavori sulla singola pagina di un tema.

Ad un certo punto nel tempo, era accettabile fare qualcosa del genere:

 include_once ('loop-standard.php');

Ma non è più la migliore pratica.

get_template_part ()

WordPress offre ora una funzione, get_template_part (), fa parte dell'API nativa e viene utilizzato specificamente per riutilizzare sezioni o modelli del codice (tranne l'intestazione, il piè di pagina e la barra laterale) attraverso il tema.

La funzione accetta due argomenti:

  • Il primo argomento è lo slug per il modello. Nell'esempio sopra, quello sarebbe 'ciclo continuo'.
  • Il secondo argomento è il nome del modello. Nell'esempio sopra, quello sarebbe 'standard','citazione', o 'Immagine'.

In linea con il nostro esempio sopra, diciamo che siamo in The Loop e vogliamo includere il modello di formato post preventivo. In tal caso, faremmo quanto segue:

 if ('quote' == get_post_format ()) get_template_part ('loop', 'quote'); 

Oppure, supponendo che tu abbia nominato i tuoi modelli per abbinare i tipi di formato del post, puoi fare qualcosa di ancora più pulito:

 get_template_part ('loop', get_post_format ());

Pulito, giusto?

Puoi davvero fare un passo in più. Supponiamo che tu abbia estratto il tuo codice di impaginazione nel suo file modello chiamato pagination.php. utilizzando get_template_part (), puoi includerlo in tutto il tuo sito, per esempio, footer.php o in index.php, single.php, archives.php, ecc. semplicemente aggiungendo:

 get_template_part ('pagination');

Molto più facile, no??


Quando dovrei usare cosa?

Quindi, dopo tutto questo, dobbiamo ancora discutere effettivamente le linee guida su quando usare cosa. In nessun caso sono un'autorità su questo, ma ecco le regole che seguo:

  1. Nello sviluppo del tema, lo uso sempre get_template_part ().
  2. In sviluppo di plugin, lo uso quasi sempre include_once () e generalmente lo uso una sola volta in una funzione. Puoi vedere questo nei miei piatti.
  3. Se il plug-in che sto scrivendo verrà utilizzato su un sito molto grande, allora lo userò require_once ().

È tutto!


Ulteriori letture

Per ulteriori spiegazioni dettagliate su ciò che è stato trattato in questo articolo, assicurarsi di leggere le pagine di manuale per ciascuna delle funzioni:

  • includere()
  • include_once ()
  • richiedere()
  • require_once ()
  • get_template_part ()