Când construiți o temă WordPress, merită să vă luați ceva timp pentru a identifica unde puteți evita repetarea codului. Acest lucru vă oferă câteva beneficii:
Din experiența mea, cel mai important dintre aceste puncte este cel de-al doilea: când trebuie să modific temele din orice motiv, sarcina este mult mai ușoară dacă fiecare bucată de cod este numai acolo o singură dată.
În acest tutorial, vă voi arăta câteva dintre modalitățile prin care puteți adopta principiul "Nu repetați-vă" sau "DRY" în dezvoltarea temelor, făcându-vă mai eficienți și mai puțin stresați în proces.
Ce nu e de placut?
Folosind un cadru, fie unul terță parte sau unul pe care îl dezvoltați, înseamnă că o mulțime de cod de care aveți nevoie va fi deja acolo pentru dvs. atunci când începeți și că nu veți găsi că scrieți același cod din nou și din nou (sau chiar deloc).
Cât de mult cod aveți nevoie în cadrul dvs. va fi de până la dvs. - ați putea prefera să utilizați un cadru barebone pe care apoi îl adăugați sau unul mai cuprinzător din care selectați funcționalitatea pentru proiectul dvs..
Pe lângă cadrele de lucru, există un număr din ce în ce mai mare de teme disponibile pentru a vă ajuta să accelerați codarea. În prezent, cea mai frecvent utilizată este tema _s, care vă oferă oasele goale de care aveți nevoie pentru a crea rapid teme WordPress.
În mod alternativ, puteți prefera să creați propriile teme de pornire care includ codul de bază pe care îl utilizați din când în când pentru proiecte, S-ar putea să creați unul simplu pe care îl adăugați sau o serie de versiuni diferite pentru diferite tipuri de proiecte.
Veți obține cea mai mare bang pentru dolarul dvs. în termeni de DRY tematice, dacă utilizați părți de șablon. Cele mai evidente dintre acestea sunt fișierele cu antet, subsol și bara laterală, dar puteți utiliza și fișiere cu buclă și alte părți de șablon pentru a vă face codul mai eficient.
Sperăm că nu aveți nevoie să vă spun acest lucru - ar trebui să utilizați întotdeauna fișiere șablon separate pentru antetul dvs. (header.php
), bara laterală (sidebar.php
) și subsol (footer.php
). Apoi le apelați în fiecare dintre fișierele șablon utilizând aceste etichete șablon:
get_header ()
get_sidebar ()
get_footer ()
Dar nu ai nevoie de mine să-ți spun asta, deci hai să trecem la o utilizare mai avansată a pieselor de șablon.
Ocazional, este posibil să doriți să utilizați un antet, o bara laterală sau un subsol diferit pentru diferite zone din site-ul dvs. Puteți face acest lucru cu ușurință, prin crearea mai multor fișiere.
De exemplu, să presupunem că doriți să utilizați o altă bara laterală pe paginile dvs. de arhivă. Ați crea un fișier pentru această bara laterală numită Sidebar-archive.php
. În tine archive.php
șablon, ați înlocui standardul get_sidebar ()
eticheta cu get_sidebar ('arhiva')
.
Acest lucru vă oferă flexibilitatea de a avea o bara laterală suplimentară, pe care o puteți utiliza apoi în mai multe fișiere șablon. De exemplu, este posibil să doriți să o utilizați în șabloanele de arhivă pentru anumite tipuri de postări. Deci, dacă ați fi chemat un tip de post buton
, ați crea un șablon de arhivă pentru acesta numit Arhiva-button.php
, și în care ați folosi get_sidebar ('arhiva')
etichetă.
Există unele dezavantaje pentru această abordare: dacă dvs. sidebar.php
și Sidebar-archive.php
fișierele au o mulțime de cod repetitiv, tema dvs. nu respectă principiul DRY îndeajuns de îndeaproape. În acest caz, puteți alege să utilizați în schimb etichete condiționate, pe care le voi acoperi mai târziu în acest tutorial.
Pe lângă piese de șablon pentru antet, subsol și bara laterală, puteți crea și alte părți ale șablonului. Apoi, apelați aceste părți ale șablonului folosind get_template_part ()
etichetă.
Cea mai obișnuită utilizare a acestui lucru este pentru bucla. Bucla este o bucată de cod repetat adesea în mai multe șabloane, deci este logic să o scoateți din fiecare dintre aceste șabloane și să o puneți într-un fișier propriu.
Pentru a face acest lucru, creați un fișier numit loop.php
cu codul pentru buclă și apoi îl chemați folosind get_template_part ('bucla')
. Acest lucru trage în mod eficient toate codul din fișierul bucla în șablonul dvs..
Puteți continua acest lucru cu mai multe bucle. De exemplu, dacă ați avea o bucla ușor diferită pentru arhive, ați crea un fișier numit loop-archive.php
și apelați-l folosind get_template_part ('bucla', 'arhiva')
. Simplu!
Uneori, este mai eficient să utilizați etichete condiționate în locul fișierelor șablon separate. WordPress vine cu un set de etichete condiționale pe care le puteți utiliza pentru a verifica ce tip de conținut este vizionat la un anumit moment sau care șablon de pagină este utilizat. Deci, puteți să le folosiți pentru a verifica dacă un anumit șablon este folosit și apoi adăugați un cod dacă acesta este. Acest lucru vă salvează crearea unui fișier de șablon suplimentar dacă fișierele șablonului au o mulțime de coduri duplicat.
Voi exemplifica acest lucru. Să presupunem că aveți o bară laterală cu o zonă widget înregistrată. În paginile unice pentru un anumit tip de post, doriți să adăugați o a doua zonă widget. S-ar putea să doriți să faceți acest lucru dacă doriți, de exemplu, să listați alte postări din tipul postării într-un widget.
Ați putea crea un fișier bara laterală separată numit Sidebar-xxx.php
, Unde xxx
este tipul dvs. de postare și apoi apelați-l în fișierul șablon pentru tipul dvs. de postare. Sau puteți folosi doar un fișier lateral cu o etichetă condiționată pentru a adăuga zona widget-ului suplimentar după cum urmează:
În tine sidebar.php
fișier, veți avea deja o zonă widget înregistrată, care ar putea arăta astfel:
Aceasta va afișa zona widget-ul bara laterală dacă a fost populată cu widget-uri.
Apoi puteți adăuga oa doua bară laterală folosind is_singular ()
etichetă condiționată:
dacă is_singular ('xxx') && is_active_sidebar ('xxx-sidebar-widget-area')) ?>Aceasta verifică dacă zona widget-ului este populată în același mod ca primul exemplu, dar adaugă o verificare suplimentară la aceasta
dacă
afirmație:is_singular ('xxx')
. Acest lucru verifică dacă site-ul afișează în prezent o singură pagină pentruxxx
post tip. Dacă acesta este cazul și zona widgetului este populată, atunci acesta va fi afișat.4. Transformarea codului repetitiv într-o funcție
Dacă codul dvs. va fi repetat din nou și din nou pe tot site-ul și nu se dorește să fie pus într-un fișier include propriu, atunci o altă soluție este de a pune într-o funcție și apoi apelați această funcție oriunde în șablonul dvs. doriți ca codul să apară.
De exemplu, este posibil să aveți un cod pentru a afișa o casetă de apel pentru acțiune:
// Conținutul CTA merge aici Repetarea aceluiași cod în mai multe locații în tema dvs. ar fi o practică proastă, deoarece ar adăuga un cod suplimentar și va face foarte dificil pentru dvs. să modificați cu exactitate codul, dacă este necesar în viitor. În schimb, ați putea să-l înfășurați într-o funcție și apoi să puneți această funcție în locurile relevante din tema dvs..
Funcția dvs. ar arăta astfel:
funcția wptp_cta () ?>// Conținutul CTA merge aici Apoi, dacă ai nevoie de caseta de apel pentru acțiune pentru a apărea în locații din tema ta, cum ar fi barele laterale sau subsolurile, ai scrie doar funcția în fișierul șablon relevant:
wptp_cta ();Marele avantaj al acestui lucru este că, dacă doriți să modificați apelul la acțiune în viitor, trebuie doar să modificați funcția o singură dată și schimbarea va fi reflectată oriunde ați fi numit în tema dvs..
5. Hooks de cod pentru acțiune
Următorul pas în dezvoltarea temelor DRY este de a utiliza cârligele de acțiune în tema dvs..
Creați un cârlig de acțiune utilizând
do_action ()
funcția, apoi atașați funcții la acel cârlig folosindADD_ACTION ()
.Acest lucru vă oferă mult mai multă flexibilitate în ceea ce privește modul în care utilizați codul dvs. recurent și vă permite să specificați nu numai unde va apărea în tema dvs., ci și în ce condiții, utilizând o combinație de funcții și etichete condiționate.
De asemenea, înseamnă că, dacă creați teme pentru copii utilizând tema originală ca temă părinte, puteți atașa funcții din tema copilului la funcția de la tema părinte.
Mă voi întoarce la exemplul din bara mea laterală. În loc de a codifica zona widget în meu
sidebar.php
dosar, adaug doar o actiune la acesta, oferindu-i un nume unic:do_action ('wptp_sidebar');Aceasta creează un cârlig de acțiune în tema mea, la care pot atașa funcții personalizate.
In al meu
functions.php
fișier, am apoi cârlig codul pentru bara laterală standard la această acțiune, după cum urmează:funcția wptp_sidebar_default () if (is_active_sidebar ("sidebar-widget-area")) ?>Am folosit-o
ADD_ACTION ()
cu doi parametri:wptp_sidebar
, numele cârligului șiwptp_sidebar_default
, numele funcției.Deci asta este bara laterală standard adăugată la tema mea. Pentru a adăuga bara laterală pentru tipul postului, adaug o a doua funcție la mine
functions.php
fișier și cârlig la același cârlig de acțiune:funcția wptp_xxx_sidebar () if (is_singular ('xxx') && is_active_sidebar ('xxx-sidebar-widget-area'Aceasta îmi împachetează cea de-a doua bara laterală într-o funcție și apoi o incendiu care funcționează pe
wptp_sidebar
cârlig de acțiune, de asemenea. Câteva lucruri de reținut:
ADD_ACTION
funcţie.15
la cea de-a doua funcție. Deoarece prioritatea implicită (care va fi atribuită primei mele funcții) este 10, aceasta înseamnă că WordPress va declanșa această a doua funcție după prima, astfel încât xxx
bara laterală va apărea sub cea implicită.Ideile pe care le-am abordat mai sus nu reprezintă o listă exhaustivă de metode pentru adoptarea principiului DRY atunci când dezvoltăm teme WordPress, dar oferă o introducere în unele dintre cele mai eficiente metode pe care le puteți utiliza.
Dacă doriți să vă asigurați că temele sunt cât se poate de eficiente, aș recomanda să faceți timp pentru a planifica structura temei înainte de a începe să scrieți codul. Identificați unde se va duplica codul și care ar fi cea mai bună abordare pentru a preveni repetarea codului și efortului. Lucrați prin ideile de mai sus, folosind cea care vă va salva cel mai mult timp și cod. Acest lucru vă va ajuta să vă dezvoltați tema în viitor.