WordPress is een CMS en daarom content manipulatie is een van de belangrijkste pijlers van de tool. In dit bericht zult u het proces dat door WP wordt gebruikt om te halen wat moet worden weergegeven begrijpen en ook hoe het mogelijk is om dit proces te veranderen.
het doel van deze tekst is geenszins een vervanging van officiële documentatie, die altijd moet worden geraadpleegd. Je doel is om op één plek te zetten wat beginners moeten weten voordat ze op zoek gaan naar meer informatie.
- Wat is een WordPress-query?
- Wat is WP_Query?
- voorwaardelijke Tags en WP_Query
- eigen loops maken: WP_Query en get_posts ()
- een lus maken met WP_Query
- een lus maken met get_posts()
- verschil tussen WP_Query en get_posts()
- global WordPress wp_query en WordPress Wp_the_query
- waarom zouden query_posts() niet gebruikt moeten worden in themabestanden?
- hoe de hoofdvraag wijzigen? Gebruik pre_get_posts
- een ander voorbeeld: Verwijder een categorie uit de lijst met blogberichten
- conclusie
Wat is een WordPress-query?
Query in het Engels betekent query en is meestal de term die wordt gebruikt om te verwijzen naar een statement in SQL (Structured Query Language). In WordPress noemen we queries De queries voor de inhoud gemaakt door de WP_Query klasse.
Wat is WP_Query?
WP_Query is de PHP-klasse achter alle zoekopdrachten naar inhoud in WordPress. Het accepteert verschillende parameters in de constructie, met inbegrip van post types, metadata, taxonomieën, en data, evenals waardoor het mogelijk is om aangepaste parameters te maken.
de klasse wp_query wordt geactiveerd op alle verzoeken die naar uw site worden gedaan, met uitzondering van misschien zeer zeldzame uitzonderingen voor Plugin-gecontroleerde adressen die de normale stroom onderbreken. Elke keer bellen we een pagina, een post, een taxonomie term en etc. WordPress interpreteert het gevraagde adres via de rewrite API en creëert een WP_Query op basis van de geà nterpreteerd argumenten.
voorwaardelijke Tags en WP_Query
eigen loops maken: WP_Query en get_posts ()
wanneer we verwijzen naar de lus in WordPress hebben we het over iteratie (zonder de n) door de geselecteerde berichten. Meestal hebben we maar één lus, die altijd lijkt op de onderstaande code:
als er berichten zijn, herhaal deze dan. Het eerste statement binnen while
is the_post()
, wat WordPress vertelt om de variabelen van de volgende post van de lus in de globale variabele $post
te plaatsen, via de setup_postdata()
methode van de WP_Query klasse.
dit is het uiterlijk van de hoofdlus, dat wil zeggen de iteratie van de reeks berichten die WordPress vond bij het decoderen van het verzoek en het zoeken naar de bijbehorende inhoud. Als we een andere set van berichten (gerelateerde inhoud, inhoud van een bepaalde categorie buiten uw bestand of berichten gepubliceerd na wat wordt weergegeven, bijvoorbeeld) kunnen we dit doen op twee manieren: het creëren van een nieuw WP_Query object of het aanroepen van de functie get_posts (). Ze doen allebei hetzelfde, maar ze zullen verschillende dingen naar je terugkeren.
een lus maken met WP_Query
een eenvoudig voorbeeld van hoe een lus te maken met WP_Query:
merk op hoe de test en iteratie op have_posts()
daar blijven, net als the_post()
, maar dit keer als methoden van de variabele die we hebben gemaakt.
de functie wp_reset_postdata () dient om de globale variabele $post
terug te zetten naar zijn status voor onze query, dat wil zeggen, het zal de post van globale $wp_query
terugzetten in globaal $post
, die we later zullen zien.
een lus maken met get_posts()
hetzelfde voorbeeld met functie get_posts()
:
de functie get_the_title () accepteert als parameter een post die verschilt van wat in de globale variabele $post
staat. Als u bijvoorbeeld de functie_content () moet gebruiken, dan moet u de Globale functie als volgt wijzigen:
verschil tussen WP_Query en get_posts()
het basisverschil is waartoe u toegang hebt. Met WP_Query heeft u bijvoorbeeld toegang tot het aantal gevonden berichten ($query->found_posts
) en het aantal mogelijke pagina ‘ s ($query->max_num_pages
). De get_posts()
functie aan de andere kant brengt een aantal reeds gevulde argumenten naast, standaard, iets sneller: het geeft de no_found_rows
parameter als true, waardoor de uiteindelijke query de SQL_CALC_FOUND_ROWS
optie niet heeft en, hiermee, MySQL wordt vrijgesteld van het doorgeven van het totale aantal gevonden rijen.
global WordPress wp_query en WordPress Wp_the_query
in dit proces van het interpreteren van het verzoek en het genereren van het WP_Query class object creëert WordPress twee globale variabelen: $wp_query
, die u waarschijnlijk ergens hebt gezien, en $wp_the_query
, die altijd de originele kopie zal zijn van wat door de gebruiker werd gevraagd. Als iemand met $wp_query
knoeit, kunnen we het tenminste terug krijgen naar zijn normale toestand met $wp_the_query
. Dit is precies wat de functie wp_reset_query() doet.
waarom zouden query_posts() niet gebruikt moeten worden in themabestanden?
dit is de standaardstroom van een verzoek naar een adres van uw site buiten het dashboard:
je moet query_posts() niet gebruiken omdat het al eerder is aangeroepen. Door het opnieuw te bellen zult u de verwerking dupliceren (WordPress vragen om een andere query te maken) en bovendien potentieel negeren wat sommige plugins al hebben gebruikt.
paging is een ander voorbeeld van hoe het gebruik van query_posts()
uw werk kan verstoren. Als u 15 berichten per pagina in een bepaalde categorie wilt weergeven en het standaard WP-bedrag via query_posts()
wilt overschrijven, dan zult u een situatie hebben waarin het eerste item op de tweede pagina het 16e moet zijn, maar in feite slechts het 11e.
hoe de hoofdvraag wijzigen? Gebruik pre_get_posts
het gebruik van query_posts()
is al enige tijd af te raden. Sindsdien hebben velen uitgelegd waarom en aangemoedigd ontwikkelaars om de actie pre_get_posts gebruiken, met speciale nadruk op Leo Bahiano, die liefdevol de bijnaam de actie preguetinho (het gebruik van woordspelingen met de Preguetinho do Leo Bahiano is toegestaan in de opmerkingen).
het gebruik is eenvoudig. Om paging in search te elimineren, bijvoorbeeld, kunt u de volgende code gebruiken in uw thema ‘ s functions.php
:
de code kent zijn functie toe aan hook pre_get_posts
, zodat zijn functie elke keer wordt uitgevoerd als een query wordt verwerkt. Binnen het moeten we ervoor zorgen dat we alleen gaan werken aan de nodige query ‘ s, dus we testen of we echt in het “front” deel van de site (op deze manier storen we niets vanuit het paneel), als we in de hoofd query van de pagina, dat wil zeggen, als de query in kwestie is $wp_the_query
en als dit alles waar is veranderen we het attribuut posts_per_page
naar -1
, wat betekent geen limiet van berichten.
een ander voorbeeld: Verwijder een categorie uit de lijst met blogberichten
als u veel wijzigingen nodig hebt, kunt u ze allemaal in één functie samenvoegen: