Mastering WP_Query acties en filters

Welkom bij het derde deel van onze serie genaamd "Mastering WP_Query". In het vorige gedeelte hebben we 13 WordPress-functies doorlopen die gerelateerd zijn aan de WP_Query klasse. In dit deel zullen we WordPress-hooks (filters en acties) bekijken die u in combinatie met kunt gebruiken WP_Query.

Dus, zonder verder oponthoud, laten we beginnen!

WP_Query-gerelateerde filters

In de "Filters Referentie" van de Codex staan ​​16 WordPress-filters vermeld onder de titel "WP_Query Filters". In dit gedeelte gaan we over hen praten. Het zal een vrij snel gedeelte zijn, omdat de meeste filters gaan over verschillende "clausules" van een databasevraag gemaakt door de WP_Query klasse.

We nemen contact met ze op, direct na het doornemen van de filters die geen verband houden met de clausules.

Het aantal gevonden berichten filteren voor de query: found_posts

Met dit filter kunt u het aantal gevonden items wijzigen zonder de limiet die hieruit voortvloeit WP_Query's posts_per_page argument.

Dit filter is met name handig voor het maken van aangepaste paginering. Laten we eens kijken wat de Codex zegt:

Als u bijvoorbeeld een aangepaste offsetwaarde in uw query's declareert, zal WordPress de offset NIET aftrekken van de parameter $ wp_query-> found_posts (als u bijvoorbeeld 45 bruikbare posts heeft na een offset van 10, zal WordPress de offset en geef found_posts nog steeds een waarde van 55).

Klinkt logisch.

De query die moet worden uitgevoerd filteren voor het ophalen van de gevonden berichten: found_posts_query

Het aantal gevonden items wordt berekend met de SELECT FOUND_ROWS () commando in MySQL. Met dit filter kunt u deze opdracht wijzigen in iets anders, voor het geval u het aantal gevonden items op een andere manier moet berekenen.

De gehele SQL-query filteren: posts_request

Als u de voltooide SQL-query wilt wijzigen, is dit het filter dat u moet gebruiken. Het overschrijft in principe de hele SQL-query die is samengesteld door de WP_Query klasse.

De matrix filteren die door de Query wordt geretourneerd: posts_results

Als u de PHP wilt wijzigen rangschikking dat WP_Query genereert met de SQL-query, kunt u dit filter gebruiken. Er is een leuk voorbeeld over op de Codex, zodat u kunt zien hoe het werkt.

(Let op: dit filter verwerkt de rauw array die is gegenereerd met de SQL-query.)

Filter de reeks van opgehaalde berichten: the_posts

anders posts_results, de the_posts filter wacht tot de array intern is verwerkt, wat betekent dat de array wordt gecontroleerd op ongepubliceerde en plakkerige berichten. Gebruik deze als u niet ongepubliceerd of berichten in uw array wilt.

De veldlijst filteren (en de SELECT Clausule) van de zoekopdracht: posts_fields

De SELECT clausule van een SQL-query bepaalt welke databasevelden worden geselecteerd uit de resulterende databaserijen en met dit filter kunt u het filteren.

Het filteren BEGRENZING Clausule van de zoekopdracht: post_limits

De BEGRENZING clausule van een SQL-query stelt de beperkingen voor de query in en met dit filter kunt u het filteren.

Het filteren DISTINCT Clausule van de zoekopdracht: posts_distinct

De DISTINCT clausule van een SQL-query stelt dat de query alleen verschillende resultaten moet retourneren en dit filter helpt u bij het filteren. Van nature, WP_Query retourneert geen verschillende resultaten, maar wanneer u dit filter gebruikt met een functie die terugkeert "DISTINCT", de vraag zal worden aangepast om alleen verschillende resultaten te retourneren.

Het filteren WAAR Clausule van de zoekopdracht: posts_where

De WAAR clausule van een SQL-query wordt gebruikt om MySQL's te filteren SELECT, INSERT, BIJWERKEN of DELETE en dit filter helpt u bij het filteren van dit filter. Terwijl de WP_Query klasse doet al het werk dat nodig is om de resultaten te filteren, je kunt nog een stap verder gaan door dit filter te gebruiken.

Het filteren WAAR Clausule van de query Nadat de paging is berekend: posts_where_paged

Dit filter is een iteratie naar de posts_where filter, die u kunt gebruiken met paging-query's.

Het filteren WAAR Clausule van een zoekopdracht: posts_search

Nog een iteratie van de posts_where filter is dit filter, dat u kunt gebruiken om de WAAR clausule van een vraag die wordt gebruikt om zoekresultaten in WordPress te krijgen.

Het filteren JOIN Clausule van de zoekopdracht: posts_join

De JOIN clausule van een SQL-query kunt u uw SQL-opdracht werken in meerdere databasetabellen, en dit filter helpt u om het te filteren. Dit is een van de geavanceerde onderdelen van MySQL, dus ik raad het gebruik van dit filter af, tenzij je heel goed weet hoe MySQL werkt JOINs werk.

Het filteren JOIN Clausule van de query Nadat de paging is berekend: posts_join_paged

Net als posts_where_paged is een iteratie van posts_where, dit is een iteratie naar de posts_join filter dat werkt op pagingquery's.

Het filteren BESTELLING DOOR Clausule van de zoekopdracht: posts_orderby

De BESTELLING DOOR clausule van een SQL-query rangschikt de volgorde van de query en met dit filter kunt u de volgorde filteren.

Het filteren GROEP DOOR Clausule van de zoekopdracht: posts_groupby

De GROEP DOOR clausule van een SQL-query zorgt ervoor dat de "gegroepeerde" resultaten worden geretourneerd door een databaseveld, en dit filter helpt u bij het filteren van de resultaten.

Alle clausules van de query filteren: posts_clauses

Als je alle clausules tegelijkertijd wilt behandelen, is daar ook een filter voor: posts_clauses. Dit filter dekt de WAAR, GROEP DOOR, JOIN, BESTELLING DOOR, DISTINCT, SELECT, en GRENZEN clausules.

WP_Query-gerelateerde acties

Nu hebben we de filters besproken die betrekking hebben op WP_Query, laten we verder gaan met de andere soort haken: acties.

Interfereert met de query voordat deze wordt uitgevoerd: pre_get_posts

Voordat de query wordt geparseerd, kunt u deze gebruiken (bijvoorbeeld extra queryvariabelen invoegen) met behulp van deze actie. Laten we een kort voorbeeld van Tom McFarlin bekijken om te leren hoe een categorie uit de hoofdlus kan worden uitgesloten:

set ('category__not_in', $ excluded); * / set_query_var ('category__not_in', $ excluded);  add_action ('pre_get_posts', 'tutsplus_exclude_category'); ?>

Omgaan met parseren van de query: parse_query

anders pre_get_posts, die tussenkomt met de vraag voor de queryvariabelen zijn ingesteld, de parse_query actie verwerkt het proces na de queryvariabelen zijn ingesteld. U moet deze actie dus gebruiken als u de huidige variabelen wilt controleren en actie onderneemt in overeenstemming met deze variabelen.

Wijzig het berichtobject: de post

De voorwaarde de actie is een beetje verwarrend omdat het de naam is van een actiehaak, een WP_Query-gerelateerde functie en ook een methode van de WP_Query klasse.

Deze actie, zoals de Codex zegt, laat ons het post-object direct aanpassen nadat het is ondervraagd en ingesteld. Met deze actie kunt u de uitvoer rechtstreeks wijzigen. Laten we een snel voorbeeld bekijken:

'. __ ('FEATURED', 'tutsplus'). '
'; add_action ('the_post', 'tutsplus_featured_badge'); ?>

Einde van deel drie

Acties en filters zijn altijd een leuk onderwerp om over te praten en te schrijven. (Ik weet zeker dat mijn twee series over WordPress-acties en WordPress-filters leuk waren om te schrijven en een geweldige reactie kregen van onze lezers.) Ik hoop dat je dit deel net zo leuk vond als ik het leuk vond om te schrijven.

Wil je iets toevoegen aan het artikel? Maak een reactie in de comments hieronder. En als je het artikel leuk vond, vergeet dan niet om het met je vrienden te delen!

Tot ziens in het volgende deel, waar we het hebben over de eigenschappen en methoden van de WP_Query klasse!