Wanneer u een WordPress-thema aan het bouwen bent, is het de moeite waard enige tijd te nemen om vast te stellen waar u herhaling van code kunt voorkomen. Dit geeft je een aantal voordelen:
In mijn ervaring is de belangrijkste van deze punten de tweede: toen ik thema's moest bewerken om welke reden dan ook, wordt de taak veel eenvoudiger gemaakt als elk stuk code daar maar één keer voorkomt.
In deze zelfstudie laat ik je enkele manieren zien waarop je het Do not Repeat Yourself- of DRY-principe kunt toepassen bij je thema-ontwikkeling, waardoor je efficiënter en minder gestrest wordt in het proces.
Wat is er niet leuk om te doen?
Het gebruik van een raamwerk, of een derde partij die je zelf ontwikkelt, betekent dat veel van de code die je nodig hebt er al voor je zal zijn als je begint, en dat je niet zult merken dat je dezelfde code opnieuw schrijft en opnieuw (of zelfs helemaal niet).
Hoeveel code u in uw raamwerk nodig heeft, is aan u - misschien geeft u er de voorkeur aan om een barebones-raamwerk te gebruiken dat u vervolgens toevoegt, of een uitgebreidere versie waaruit u de functionaliteit voor uw project selecteert.
Naast frameworks zijn er steeds meer startthema's beschikbaar om uw codering te versnellen. Momenteel wordt het thema _s het meest gebruikt, waardoor je de kale botten hebt die je nodig hebt om snel WordPress-thema's te maken.
Als alternatief kunt u er de voorkeur aan geven om uw eigen startthema's te maken, met inbegrip van de basiscode die u keer op keer gebruikt in projecten. U kunt er één maken die u toevoegt, of een aantal verschillende versies voor verschillende soorten projecten..
U krijgt het meeste waar voor uw geld in termen van DROGE thema's als u gebruikmaakt van sjabloondelen. De meest voor de hand liggende hiervan zijn de header-, footer- en zijbalkbestanden, maar u kunt ook gebruik maken van loop-bestanden en andere sjabloononderdelen om uw code efficiënter te maken.
Hopelijk hoef je me dit niet te vertellen. Je moet ALTIJD afzonderlijke sjabloonbestanden gebruiken voor je header (header.php
), zijbalk (sidebar.php
) en voettekst (footer.php
). Vervolgens roept u deze in elk van uw sjabloonbestanden met behulp van deze sjabloon tags:
get_header ()
get_sidebar ()
get_footer ()
Maar je had me niet nodig om je dat te vertellen, dus laten we verder gaan met meer geavanceerd gebruik van sjabloononderdelen.
Af en toe wilt u misschien een andere koptekst, zijbalk of voettekst gebruiken voor verschillende delen van uw site. U kunt dit eenvoudig doen door meerdere bestanden te maken.
Stel dat u bijvoorbeeld een andere zijbalk op uw archiefpagina's wilt gebruiken. U zou een bestand voor deze sidebar maken genaamd sidebar-archive.php
. In uw archive.php
sjabloonbestand, zou u de standaard vervangen get_sidebar ()
tag met get_sidebar ('archive')
.
Dit geeft u de flexibiliteit om een extra zijbalk te hebben, die u vervolgens kunt gebruiken in meerdere sjabloonbestanden. U zou het bijvoorbeeld willen gebruiken in de archiefsjablonen voor specifieke berichttypen. Dus als je een berichttype hebt gebeld knop
, je zou een archiefsjabloon maken waarvoor het wordt gebeld archief-button.php
, en in dat zou je de get_sidebar ('archive')
label.
Er zijn enkele nadelen aan deze aanpak: als je sidebar.php
en sidebar-archive.php
bestanden hebben veel herhalende code, je thema volgt het DRY-principe niet genoeg op de voet. Als dit het geval is, kunt u ervoor kiezen om voorwaardelijke tags te gebruiken, die ik later in deze zelfstudie zal bespreken.
Naast sjabloondelen voor de koptekst, voettekst en zijbalk, kunt u ook andere sjabloondelen maken. Vervolgens roept u deze sjabloononderdelen op met behulp van de get_template_part ()
label.
Het meest gebruikelijke gebruik hiervan is voor de lus. De lus is een stuk code dat vaak in meerdere sjablonen wordt herhaald, dus is het zinvol om het uit elk van die sjablonen te halen en het in een eigen bestand te plaatsen.
Hiertoe maakt u een bestand met de naam loop.php
met de code voor je lus en dan noem je die met get_template_part ('loop')
. Hiermee wordt effectief alle code uit uw lusbestand naar uw sjabloon getrokken.
Je kunt dit met meerdere lussen verder gaan. Als u bijvoorbeeld een iets andere lus had voor archieven, zou u een bestand met de naam. Maken lus-archive.php
en noem het met get_template_part ('loop', 'archive')
. Eenvoudig!
Soms is het efficiënter om voorwaardelijke tags te gebruiken in plaats van afzonderlijke sjabloonbestanden. WordPress wordt geleverd met een set voorwaardelijke tags die u kunt gebruiken om te controleren welk inhoudstype op een bepaald moment wordt bekeken of welke paginasjabloon wordt gebruikt. U kunt ze dus gebruiken om te controleren of een specifieke sjabloon wordt gebruikt en vervolgens een code toevoegen als dit het geval is. Dit bespaart u het maken van een extra sjabloonbestand als uw sjabloonbestanden veel gedupliceerde code bevatten.
Ik zal dit illustreren met een voorbeeld. Laten we zeggen dat je een zijbalk hebt met een widgetgebied geregistreerd. Op de afzonderlijke pagina's voor een bepaald berichttype wilt u een tweede widgetgebied toevoegen. U kunt dit doen als u bijvoorbeeld andere berichten van dat berichttype in een widget wilt opnemen.
U kunt een afzonderlijk sidebar-bestand maken met de naam sidebar-xxx.php
, waar xxx
is uw berichttype en bel dat dan in het sjabloonbestand voor uw berichttype. Of u kunt gewoon een zijbalkbestand met een voorwaardelijke tag gebruiken om het extra widgetgebied als volgt toe te voegen:
In uw sidebar.php
bestand, hebt u al een widgetgebied geregistreerd, dat er ongeveer zo uitziet:
Hiermee wordt het zijbalk-widgetgebied weergegeven als het is gevuld met widgets.
U kunt vervolgens een tweede zijbalk toevoegen met behulp van de is_singular ()
voorwaardelijke tag:
if (is_singular ('xxx') && is_active_sidebar ('xxx-sidebar-widget-area')) ?>Hiermee wordt gecontroleerd of het widgetgebied op dezelfde manier wordt gevuld als het eerste voorbeeld, maar wordt daar een extra controle aan toegevoegd
als
uitspraak:is_singular ('xxx')
. Hiermee wordt gecontroleerd of de site momenteel één pagina weergeeft voor dexxx
berichttype. Als dat het geval is en het widgetgebied is ingevuld, wordt het weergegeven.4. Repetitieve code in een functie veranderen
Als je code steeds opnieuw wordt herhaald op de site en het leent zich niet om in een eigen bestand te worden opgenomen, dan is een andere oplossing om het in een functie te plaatsen en vervolgens die functie te bellen waar je ook bent in je sjabloon wil dat de code verschijnt.
U kunt bijvoorbeeld een code hebben om een call-to-action-vak weer te geven:
// CTA-inhoud komt hier Herhaling van dezelfde code op meerdere plaatsen in uw thema zou een slechte gewoonte zijn, omdat het extra code zou toevoegen en het voor u erg moeilijk zou maken om de code nauwkeurig te wijzigen als u dat in de toekomst zou moeten doen. In plaats daarvan kunt u het in een functie plaatsen en vervolgens die functie op relevante plaatsen in uw thema plaatsen.
Je functie zou er als volgt uitzien:
functie wptp_cta () ?>// CTA-inhoud komt hier Als u vervolgens uw call-to-action-vak op plaatsen in uw thema, zoals zijbalken of voetteksten, wilt weergeven, schrijft u de functie alleen in het relevante sjabloonbestand:
wptp_cta ();Het grote voordeel hiervan is dat als je de call-to-action in de toekomst wilt veranderen, je de functie slechts één keer hoeft te veranderen en de verandering overal wordt weergegeven waar je het in je thema hebt genoemd.
5. Hooking Code to Action Hooks
De volgende stap in DROGE thema-ontwikkeling is om gebruik te maken van actiehaken in uw thema.
U maakt een actiehaak met behulp van de
do_action ()
functie, en vervolgens koppelt u functies aan die haak met behulp vanadd_action ()
.Dit geeft u veel meer flexibiliteit bij het gebruik van uw terugkerende code en biedt u de mogelijkheid om niet alleen op te geven waar in uw thema het zal verschijnen, maar onder welke omstandigheden, met behulp van een combinatie van functies en voorwaardelijke tags.
Het betekent ook dat als u kindthema's maakt met uw oorspronkelijke thema als bovenliggend thema, u functies in uw kindthema kunt koppelen aan de functie vanuit het bovenliggende thema.
Ik zal terugkeren naar mijn sidebar-voorbeeld. In plaats van het widgetgebied in mijn te coderen
sidebar.php
bestand, ik voeg er gewoon een actie aan toe en geef deze een unieke naam:do_action ('wptp_sidebar');Hiermee maak je een actiehaak in mijn thema, waaraan ik aangepaste functies kan koppelen.
In mijn
functions.php
bestand, haak ik de code voor de standaardzijbalk van deze actie als volgt:function wptp_sidebar_default () if (is_active_sidebar ('sidebar-widget-area')) ?>Ik heb gebruikt
add_action ()
met twee parameters:wptp_sidebar
, de naam van de haak, enwptp_sidebar_default
, de naam van de functie.Dat is de standaard zijbalk die is toegevoegd aan mijn thema. Om de zijbalk toe te voegen voor mijn berichttype, voeg ik een tweede functie toe aan mijn
functions.php
bestand en haak het aan dezelfde actiehaak:functie wptp_xxx_sidebar () if (is_singular ('xxx') && is_active_sidebar ('xxx-sidebar-widget-area')) ?>Dit omsluit mijn tweede zijbalk in een functie en vuurt vervolgens die functie op de
wptp_sidebar
actiehaak ook. Een paar dingen om op te merken:
add_action
functie.15
naar mijn tweede functie. Aangezien de standaardprioriteit (die aan mijn eerste functie is toegewezen) 10 is, betekent dit dat WordPress deze tweede functie na die eerste functie zal activeren, dus de xxx
zijbalk verschijnt onder de standaardbalk.De ideeën die ik hierboven heb behandeld, zijn geen uitputtende lijst van methoden om het DRY-principe te gebruiken bij het ontwikkelen van WordPress-thema's, maar geven een inleiding tot enkele van de meest effectieve methoden die u kunt gebruiken.
Als u ervoor wilt zorgen dat uw thema's zo efficiënt mogelijk zijn, raad ik u aan de tijd te nemen om de structuur van uw thema te plannen voordat u begint met het schrijven van code. Geef aan waar code wordt gedupliceerd en welke aanpak het beste is om herhaling van code en inspanningen te voorkomen. Werk je een weg door de bovenstaande ideeën, met behulp van degene die je de meeste tijd en code zal besparen. Dit zal je helpen het thema verder te ontwikkelen in de toekomst.