Cum să includem și să solicităm fișiere și șabloane în WordPress

Când vine vorba de PHP, o mulțime de dezvoltatori iubesc limba, o mulțime de dezvoltatori urăsc limba, și o mulțime de dezvoltatori, în general, doar să-l utilizați pentru a obține munca lor.

Pentru ce merită, sunt din tabăra din urmă. Cred că PHP este bine. Ca orice altceva, nu este fără probleme, dar îmi place să lucrez cu el destul de bine și să văd că este o modalitate de a face o treabă față de o limbă de tip pie-in-the sky pentru o perioadă de utopie a dezvoltării.

Lucrul este că unul dintre lucrurile pe care dragostea dezvoltatorului față de PHP - trăsăturile și flexibilitățile sale - sunt lucrurile care ne despart de multe ori. Lista este lungă, dar în lumea WordPress, unul dintre cele mai comune puncte de confuzie este modul potrivit de a include fișiere externe.

PHP oferă patru (!) Modalități de a face acest lucru și WordPress oferă chiar propria variație a acestuia.

În acest articol, vom analiza cele patru moduri pe care PHP le oferă pentru a include fișiere, linii directoare pentru momentul de utilizare a fiecăruia și vom examina funcțiile WordPress pentru includerea fișierelor.


Includerea fișierelor cu PHP

În general, inclusiv fișierele cu PHP se referă la acțiunea de a include un alt script în contextul scriptului pe care lucrați în prezent.

Vă puteți gândi la acest lucru importând un fișier astfel încât atunci când fișierul este returnat de pe server, script-urile sunt combinate împreună în ordinea în care sunt incluse și apoi interpretate ca un singur fișier.

În primul rând, vom examina modalitățile de includere a fișierelor în PHP și implicațiile fiecăruia. La sfârșitul articolului, vom examina când ar trebui să facem acest lucru.

include()

Conform manualului PHP:

include () va include și va evalua fișierul specificat. Dacă fișierul nu este găsit, va fi aruncat un avertisment PHP.

Pur și simplu, aceasta înseamnă că PHP va arăta spre fișierul pe care încercați să-l includeți. Dacă s-a găsit, atunci acesta va fi adăugat la scenariul dvs. în locul exact pe care l-ați declarat.

Acest lucru este important de înțeles. De exemplu, să presupunem că scrieți un set de funcții care depind de un set anterior de funcții. În acest caz, va trebui să vă asigurați că primul fișier este inclus primul.

Pe de altă parte, dacă doriți să aduceți un set de funcții sau un fișier extern în mijlocul unei funcții existente, puteți să-l includeți exact în locul în care aveți nevoie.

În al doilea rând, rețineți că dacă fișierul lipsește, PHP va arunca un avertisment. În funcție de configurația serverului, este posibil să vedeți această redare în browser sau puteți vedea acest lucru într-un fișier jurnal (sau ambele).

Cu toate acestea, avertismentele sunt doar că - ele nu sunt considerate letale și, în mod obișnuit, nu se opresc din execuție, dar sunt importante pentru a le menționa, deoarece în general implică faptul că o parte din munca dvs. nu este încărcată și / sau interpretată corect.

În cele din urmă, rețineți că atunci când un fișier este încărcat utilizând include() că va avea acces la toate variabilele definite anterior în scriptul dvs. existent.

De exemplu, spuneți că lucrați la o funcție și la jumătatea funcției, veți include un fișier separat. Acest fișier separat va avea acces la variabilele definite anterior în funcția în care este inclus.

Deși puteți vedea acest lucru la fel de convenabil, face ca scriptul extern să fie un pic neclar, deoarece nu arată neapărat că acesta depinde de variabilele definite extern. Acest lucru poate fi confuz, mai ales atunci când lucrați cu o echipă.

include_once ()

Luat direct din manualul PHP:

include_once () va efectua același comportament cu includerea (), dar nu va include din nou fișierul dacă acesta a fost deja inclus.

Evident, nu este nevoie să vă petreceți prea mult timp vorbind despre punctele generale ale include_once (), dar există unele diferențieri cheie între modul în care include_once () lucrări și cum include() lucrări.

În primul rând, în timp ce include_once () funcționează în mare măsură la fel ca include(), o sa nu vă permite să includeți din nou scenariul. Aceasta înseamnă că, dacă altundeva în proiectul dvs. a fost inclus un fișier extern, asta e locul definitiv în care dosarul a fost inclus.

Deci, care este avantajul? Pe lângă asigurarea că există doar un singur loc în care este inclus un script, acesta asigură, de asemenea, că variabilele și funcțiile nu vor fi neapărat redefinite. Amintiți-vă că atunci când utilizați include(), scripturile au acces la funcții și variabile care sunt definite deasupra lor.

Dacă alegeți să definiți un set nou de variabile sau funcții într - un fișier, includeți - l într - un alt script și nu utilizare include_once (), atunci aveți riscul redefinării funcțiilor și a variabilelor care pot provoca probleme majore în execuția codului.


Solicitarea de fișiere cu PHP

Solicitarea de fișiere este similară cu includerea fișierelor prin faptul că este un alt mod în care puteți include un script în scriptul pe care îl scrieți în prezent, dar poartă un set de implicații proprii în ceea ce privește erorile și securitatea.

Deși puteți lua în considerare actul de a solicita un fișier în același mod în care puteți include un fișier, acesta implică faptul că este mai puternic - adică fișierul extern este necesar pentru executare.

După cum vom vedea, exact acesta este cazul.

require ()

Încă o dată, direct din manualul PHP:

require () efectuează același lucru ca include () dar va arunca o eroare fatală PHP în cazul în care fișierul nu este găsit.

Deci aici e chestia asta require (): va efectua aceeași acțiune ca și include() în ceea ce privește importul scriptului extern în contextul în care lucrați, dar dacă nu reușește să localizeze fișierul, acesta aruncă o eroare și oprește complet execuția.

Aceasta înseamnă că cererea dvs. se oprește. Cu include(), veți primi un avertisment și va încerca să continue.

La un anumit nivel, poate părea că este nevoie de fișiere  modalitate corectă de a merge. La urma urmei, de ce ați vrea să riscați să includeți ceva doar pentru a avea un avertisment cu potențialul eșec al aplicației.

Dar totul se reduce la natura a ceea ce lucrați. Uneori, avertismentele simple PHP sunt în regulă - ca și cum ați uita să inițializați indexul unei matrice - alteori aveți nevoie de o eroare.

Nu există reguli dure și rapide când să utilizați acest versus include, dar gândiți-vă critic asupra naturii a ceea ce faceți și a implicațiilor pe care le implică dacă ar eșua.

require_once ()

În sfârșit, din manualul PHP:

require_once () îndeplinește aceeași cerință (), dar nu va include fișierul a doua oară dacă este deja inclusă.

Acest lucru este posibil cel mai ușor de înțeles deoarece am acoperit ultimele detalii în detaliu. Pur și simplu pune, require_once () îndeplinește exact aceleași funcții ca și cerințele, deși nu va încerca să includă din nou un fișier dacă este deja încărcat în scriptul dvs..


Regulile Thumb

În plus față de gândirea critică prin care funcția este cea mai bună pentru natura proiectului dvs., aici sunt două reguli suplimentare de degetul mare să ia în considerare atunci când lucrați cu include() și require ():

  • require_once () este mai bine pentru site-urile mai mari, deoarece face unele lucrări suplimentare la nivelul inferior care afectează securitatea și performanța
  • include_once () este mai rapidă și, în general, este considerată acceptabilă pentru site-uri mai mici

Destul de ușor, dar despre funcțiile helper WordPress?


Includerea de fișiere cu WordPress

Cu toate acestea a spus, acolo sunteți modalități mai bune decât utilizarea include() și require () pentru a include șabloane în proiectele dvs. WordPress.

Spuneți, de exemplu, că aveți mai multe fișiere în buclă - una pentru un format de post:

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

Și trebuie să le includeți single.php ori de câte ori lucrați la o pagină de post unică a temei.

La un moment dat, era acceptabil să faci așa ceva:

 include_once ('loop-standard.php');

Dar aceasta nu mai este cea mai bună practică.

get_template_part ()

WordPress oferă acum o funcție, get_template_part (), care face parte din API-ul nativ și este folosit în mod special pentru reutilizarea secțiunilor - sau a șabloanelor - a codului (cu excepția antetului, subsolului și barei laterale) prin tema.

Funcția acceptă două argumente:

  • Primul argument este slugul pentru șablon. În exemplul de mai sus, ar fi "buclă'.
  • Al doilea argument este numele șablonului. În exemplul de mai sus, ar fi "standard","citat"sau"imagine'.

Prin lipirea cu exemplul nostru de mai sus, să spunem că suntem în The Loop și dorim să includeți șablonul pentru formatul postului de cotare. În acest caz, am face următoarele:

 dacă ('quote' == get_post_format ()) get_template_part ('loop', 'quote'); 

Sau, presupunând că ați denumit șabloanele dvs. pentru a se potrivi cu tipurile de postare, puteți face ceva și mai curat:

 get_template_part ('loop', get_post_format ());

Curățenie, corectă?

De fapt, puteți să faceți un pas mai departe. Să presupunem că ați extras codul dvs. de paginare în propriul fișier de șablon numit pagination.php. Utilizarea get_template_part (), puteți include acest lucru pe tot site-ul dvs., de exemplu, footer.php sau în index.php, single.php, archives.php, etc pur și simplu prin adăugarea:

 get_template_part ("paginare");

Mult mai ușor, nu-i așa??


Când ar trebui să folosesc ce?

Deci, după toate acestea, încă nu am discutat cu privire la orientările când să folosim ce. În nici un caz nu am o autoritate în acest sens, dar aici sunt regulile degetului mare pe care le urmăresc:

  1. În dezvoltarea temelor, folosesc mereu get_template_part ().
  2. În dezvoltarea plugin-urilor, aproape întotdeauna le folosesc include_once () și în general o folosesc o dată într-o funcție. Puteți vedea asta în boilerele mele.
  3. Dacă pluginul pe care îl scriu va fi folosit pe un site foarte mare, atunci îl folosesc require_once ().

Asta e tot!


Citirea în continuare

Pentru explicații mai detaliate despre ceea ce a fost acoperit în acest articol, asigurați-vă că citiți paginile manuale pentru fiecare dintre funcții:

  • include()
  • include_once ()
  • require ()
  • require_once ()
  • get_template_part ()
Cod