Mastering WP_Query An Introduction

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:

  • Wat is WP_Query?
  • Waarom gebruiken WP_Query?
  • Potentiële problemen / waar je bewust van moet zijn.

Wat is 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:

  • de argumenten voor de query, met behulp van parameters die in deze reeks gedetailleerd worden behandeld
  • de vraag zelf
  • de lus, die post-inhoud, titels of wat dan ook die u wilt weergeven, uitvoert
  • afwerken: het sluiten van en wanneer tags en het resetten van berichtgegevens

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.

Postgegevens opnieuw instellen

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.

Waarom WP_Query gebruiken?

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.

Waarom WP_Query gebruiken over andere methoden?

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:

Wanneer u WP_Query zou kunnen gebruiken

Er zijn veel scenario's wanneer WP_Query zal nuttig zijn, en ik kan ze hier niet allemaal behandelen, maar hier is een overzicht:

  • Een lijst met gerelateerde berichten onder het huidige bericht toevoegen, bijvoorbeeld een lijst met alle berichten in dezelfde categorie.
  • Om twee loops op dezelfde pagina te maken: bijvoorbeeld een FAQ-pagina met de vraagtitels bovenaan en de inhoud eronder.
  • Een aangepaste lijst met recente berichten maken in de zijbalk of voettekst van uw site, wanneer de widget Recente berichten niet doet wat u zoekt (of liever zelf codeert).
  • Aangepaste queries voor taxonomieën maken met behulp van meer dan één taxonomie om te definiëren wat wordt weergegeven.
  • Voor het opvragen van berichttypen die niet worden uitgevoerd door de standaardquery, zoals bijlagen.
  • Aangepaste pagina's maken met een aantal query's voor verschillende inhoudstypen, zoals ik in deze voorbeeldsite voor een client heb gedaan.

Sommige kanttekeningen

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:

  • Als u alleen de manier wilt wijzigen waarop berichten worden weergegeven voor een bepaald inhoudstype of archief, gebruik dan niet WP_Query. Maak in plaats daarvan eenvoudig een sjabloonbestand voor dat archief of inhoudstype en pas de lus in dat sjabloonbestand aan.
  • Als u een paar min of meer berichten wilt weergeven dan normaal op een archiefpagina wordt weergegeven (bijvoorbeeld als u geen bepaalde categorie weergeeft), gebruik dan niet 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.
  • Pas op voor het uitvoeren van teveel zoekopdrachten op een pagina. Je zou theoretisch een pagina kunnen maken met honderden aangepaste queries, maar denk maar aan de serverbelasting. Als u meer dan vier of vijf query's op een pagina nodig heeft, kunt u overwegen extra pagina's te maken.

Samenvatting

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.