WordPress voert standaard een query uit op elke pagina die op uw site wordt weergegeven, waarvan de aard zal worden bepaald door het type pagina dat wordt bekeken. Dus als een statische pagina wordt bekeken, voert WordPress een query uit om de pagina met de relevante ID weer te geven. Als een archiefpagina wordt bekeken, haalt de query alle berichten in dat archief op..
Maar soms wil je dingen een beetje anders doen. Ofwel in de hoofdinhoud van uw pagina of ergens anders op de pagina (zoals in de zijbalk of voettekst), wilt u misschien wat specifieke inhoud weergeven die niet wordt uitgevoerd door de standaardvraag.
Het goede nieuws is dat WordPress dat mogelijk maakt met de WP_Query
klasse. Deze klasse biedt u een groot aantal parameters die u kunt gebruiken om te definiëren welke inhoud u wilt uitvoeren (die niet beperkt hoeft te zijn tot berichten) en vervolgens een lus moet schrijven die de inhoud precies laat zien zoals u dat wilt.
In deze negentiendelige serie over Mastering WP_Query
, Baris Unver en ik nemen je mee door de ins en outs van WP_Query
zodat u nadat u de reeks hebt voltooid, deze in verschillende scenario's kunt gebruiken en de manier kunt aanpassen waarop WordPress de gegevens in de database van uw site opvraagt.
In deze inleiding zal ik het volgende behandelen:
WP_Query
?WP_Query
?WP_Query
is een klasse die wordt aangeboden door WordPress. Het feit dat het een klasse is, betekent dat je door het te gebruiken snel toegang hebt tot de variabelen, controles en functies die in die klasse in WordPress core zijn gecodeerd, zonder je zorgen te hoeven maken dat je die code zelf schrijft. Dit maakt uw code efficiënter en betrouwbaarder.
Als je precies wilt begrijpen hoe WP_Query
werkt onder de motorkap, je kunt de code ervan zien in de includes / query.php
het dossier.
WP_Query
bestaat uit vier hoofdelementen:
In de praktijk zal dit er ongeveer zo uitzien:
have_posts ()) // Start het doorlopen van de queryresultaten. while ($ query-> have_posts ()) $ query-> the_post (); // Inhoud van de opgevraagde resultaten van de post ga hier naartoe. // Oorspronkelijke berichtgegevens herstellen. wp_reset_postdata (); ?>
Je zou je argumenten kunnen definiëren bij het schrijven van de vraag zelf, maar ik geef er de voorkeur aan deze eerst te definiëren, omdat het dingen netjes houdt.
In het bovenstaande voorbeeld heb ik toegevoegd wp_reset_postdata ()
na elke vraag. Dit is belangrijk omdat het de query terugzet naar de hoofdquery die op die pagina wordt uitgevoerd.
Bijvoorbeeld als u gebruikt WP_Query
om een query in de zijbalk uit te voeren, met wp_reset_postdata ()
vertelt effectief aan WordPress dat we nog steeds op welke pagina dan ook worden bekeken en dat deze moet werken met de standaardquery voor die pagina.
Als u dit niet doet, kunnen andere query's die op de pagina worden uitgevoerd (inclusief de standaardquery) mogelijk worden verbroken en eventuele voorwaardelijke tags die controleren op welk type pagina wordt bekeken, werken niet.
Als u de WP_Query
in de klas, vraag je je misschien af waarom je zou moeten beginnen. Hier ga ik me concentreren op twee aspecten hiervan: waarom gebruiken WP_Query
over andere methoden voor het schrijven van aangepaste query's en scenario's waar u mogelijk gebruik van wilt maken WP_Query
.
WP_Query is niet de enige methode om een aangepaste query te maken. Er zijn er nog vier:
pre_get_posts
get_posts ()
get_pages ()
query_posts ()
(die je moet vermijden, zoals ik zal uitleggen)Ik ga niet in detail ingaan op de manier waarop elk van deze werkt, maar het is handig om te weten wanneer ze worden gebruikt:
pre_get_posts
is een haak die de hoofdvraag wijzigt. U kunt het gebruiken met een voorwaardelijke tag om te controleren of een bepaald type pagina wordt bekeken (bijvoorbeeld de startpagina) en vervolgens gebruiken om de query aan te passen die wordt uitgevoerd (bijvoorbeeld om de meest recente drie berichten te verwijderen, als u ' ze elders op de pagina weergeven). Het is een zeer efficiënte manier om de hoofdquery te wijzigen en zou je eerste aanloophaven moeten zijn als dat is wat je wilt doen. U kunt het echter niet gebruiken om een geheel nieuwe query te maken.get_posts ()
en get_pages ()
lijken erg op elkaar, waarbij het grootste verschil duidelijk uit hun naam blijkt. Deze sjabloontags gebruiken de WP_Query
klasse, dus ze zijn een andere manier om hetzelfde te doen, maar voeg een extra stap toe omdat ze de WP_Query
klasse in plaats van dat je het direct doet. Je kunt ze alleen gebruiken om berichten of pagina's te zoeken WP_Query
zelf is krachtiger en kunt u bijna alles in uw database opvragen.query_posts ()
wijzigt de hoofdquery maar mag niet worden gebruikt in plug-ins of thema's. Dit komt omdat het de hoofdquery weggooit en helemaal opnieuw begint, waarbij de hoofdquery wordt vervangen door een nieuwe query. Het is ook gevoelig voor fouten, met name bij paginering, en is inefficiënt en heeft invloed op de laadtijd van uw pagina. Als u de hoofdquery moet wijzigen, gebruikt u pre_get_posts
gebruik in plaats daarvan, en als u een geheel nieuwe query wilt maken WP_Query
.Het onderstaande schema, vrijgegeven door Andrey "Rarst" Savchenko onder Creative Commons-licentie, geeft hier een idee van:
Er zijn veel scenario's wanneer WP_Query
zal nuttig zijn, en ik kan ze hier niet allemaal behandelen, maar hier is een overzicht:
De WP_Query
klas is geweldig. Ik maak veel sites die aangepaste queries nodig hebben, dus ik gebruik het vaak. Maar het komt niet zonder zijn nadelen. Hier zijn enkele dingen waar u op moet letten:
WP_Query
. Maak in plaats daarvan eenvoudig een sjabloonbestand voor dat archief of inhoudstype en pas de lus in dat sjabloonbestand aan.WP_Query
om een geheel nieuwe query te maken. Gebruik in plaats daarvan pre_get_posts
om de hoofdquery te wijzigen, samen met een voorwaardelijke tag om uit te zoeken waar u precies wilt.De WP_Query
class is een krachtige en uiterst nuttige tool voor het maken van aangepaste query's en om ervoor te zorgen dat uw WordPress-site precies zo werkt als u wilt. Zoals we hebben gezien, zijn er soms momenten waarop u andere methoden zou gebruiken om aangepaste query's te maken, maar deze heeft een breed scala aan toepassingen.
In de rest van deze serie zullen we u de details van het gebruik bespreken WP_Query
en haal er het meeste uit.