Mastering WP_Query gerelateerde functies

Hallo, en welkom bij het tweede deel van de serie genaamd "Mastering WP_Query". In het eerste deel begonnen we met de serie door simpelweg te introduceren wat de WP_Query klasse is. En in dit tweede deel gaan we leren over de functies in verband met WP_Query.

Laten we beginnen!

De kracht van WP_Query benutten met functies, acties en filters

Ik ben geen expert in programmeren, maar ik zie dat het WP_Query klasse is een van de beste voorbeelden van het MVC-patroon. Het is extreem krachtig, volledig uitbreidbaar en zeer gemakkelijk te gebruiken zodra je de basiskennis leert kennen.

Naast de eigenschappen, methoden en parameters (die we in de toekomst gaan gebruiken) biedt WordPress extra functies en hooks (wat betekent acties en filters) om met de WP_Query klasse. In deze zelfstudie leren we de functies kennen en in het volgende deel zullen we acties en filters zien gerelateerd WP_Query. Als je ziet dat ik iets vergeten ben, voel je vrij om me op de hoogte te stellen door een opmerking te maken.

WP_Query Gerelateerde functies

Er zijn 13 WordPress-functies die werken met de WP_Query klasse die je kan helpen de kracht van te benutten WP_Query. Ze hebben geen introductie nodig, dus hier gaan we:

Openbare queryvariabelen verkrijgen: get_query_var ()

De naam van onze eerste functie spreekt voor zich, echt: het vergt de wereldwijde $ wp_query object en haalt hieruit een openbare queryvariabele op. Het heeft twee parameters: de eerste is de variabele om zijn waarde te retourneren en de tweede is een standaardwaarde die moet worden geretourneerd als de variabele niet is ingesteld:

Beïnvloedt de hoofdlus: query_posts ()

Om eerlijk te zijn, dit is een slecht functie. Je hoeft het echt helemaal niet te gebruiken, maar om 'de juiste manier' te vertellen, gaan we erover vertellen dat het 'de verkeerde manier' is.

query_posts () is een functie die de hoofdquery wijzigt door de hoofdquery opzij te zetten en een nieuwe query uit te voeren - en u zult deze moeten gebruiken wp_reset_query () om het daarna op te ruimen.

Deze functie is een van de meesten misbruikt functies in de kern van WordPress. U zou het niet moeten gebruiken om secundaire query's te maken - u kunt het gebruiken WP_Query klas of de get_posts () functie (waar we later in deze tutorial over zullen praten). U zou het ook niet moeten gebruiken om de hoofdvraag te wijzigen - u zou de pre_get_posts actie (waarover we later ook zullen praten). Zelfs de Codex ontmoedigt ons om het te gebruiken en toont alternatieven.

Kort gezegd: gebruik het niet.

Een enkele post krijgen: get_post ()

Een andere, voor zichzelf sprekende functie is get_post (), die je gebruikt om een ​​enkele post te krijgen. Het heeft drie optionele parameters:

  • De eerste is de bericht-ID (of de ID van het huidige bericht standaard).
  • De tweede is het type resultaat dat u krijgt: een van beide VOORWERP, ARRAY_A (een associatieve array) of ARRAY_N (een numerieke array).
  • De derde is de keuze om het resultaat te filteren. De standaard is 'Ruwe' dus het wordt niet gefilterd tenzij je het instelt op 'Bewerk', 'Display', 'attribuut' of 'Js'.

Query's opslaan in arrays: get_posts ()

De get_posts () Met de functie kunnen we query's uitvoeren en deze als arrays opslaan om op verschillende plaatsen te gebruiken. Het vereist dezelfde argumenten met WP_Query zodat u de zoekopdracht kunt aanpassen zoals u wilt. (We zullen beoordelen WP_Query's parameters in de toekomst, dus blijf op de hoogte!) Het is de beste en meest efficiënte manier om postlijsten te maken - maar geen loops.

 'news', 'order' => 'ASC', 'orderby' => 'post_title', 'posts_per_page' => -1); // Een reeks van alle berichten retourneren in de categorie 'Nieuws'. $ all_posts_list = get_posts ($ args); ?>

Hoewel deze functie kan worden gebruikt om "secundaire query's" probleemloos uit te voeren, raadt de Codex aan dit te gebruiken WP_Query bij het maken van meerdere loops en gebruik get_posts () bij het ophalen van een lijst met berichten. Peter R. Knight legt het verschil tussen get_posts () en WP_Query in eenvoudige bewoordingen: het grootste verschil is dat WP_Query maakt meer databasequery's (postgegevens, metagegevens, auteursgegevens en reactiegegevens) terwijl get_posts () maakt slechts één zoekopdracht (gegevens plaatsen).

Pagina's krijgen: get_pages ()

Deze vreemd functie heeft als doel een lijst met pagina's op te halen, hoewel deze een post_type parameter waarmee u ook een ander berichttype kunt selecteren (op voorwaarde dat het berichttype hiërarchisch is, anders wordt het geretourneerd vals).

 'ASC', 'sort_column' => 'post_title', 'hierarchical' => 1, 'exclude' => ", 'include' =>", 'meta_key' => ", 'meta_value' =>", 'auteurs '=> ",' child_of '=> 0,' parent '=> -1,' exclude_tree '=>",' number '=> ",' offset '=> 0,' post_type '=>' pagina ', 'post_status' => 'publiceren'); $ pages = get_pages ($ args);?>

Het accepteert argumenten die sterk op elkaar lijken WP_Query's argumenten, maar ze zijn iets anders:

  • sorteervolgorde: Of de pagina's in oplopende volgorde worden gesorteerd (ASC) of aflopend (desc) bestellen.
  • sorteerkolom: Hoe de pagina's te sorteren. accepteert POST_TITLE, menu_order, post-datum, post_modified, ID kaart, post_author, en POST_NAME.
  • hiërarchische: Of pagina's hiërarchisch worden weergegeven (1) of niet (0).
  • uitsluiten: Een door komma's gescheiden lijst of een reeks pagina-ID's om uit te sluiten van de lijst.
  • omvatten: Een door komma's gescheiden lijst of een reeks pagina-ID's die in de lijst moet worden opgenomen en de rest moet worden uitgesloten.
  • meta_key: Wanneer gebruikt met de meta_value argument, het bevat alleen pagina's met de gedefinieerde meta-sleutel en waarde.
  • meta_value: Wanneer gebruikt met de meta_key argument, het bevat alleen pagina's met de gedefinieerde meta-sleutel en waarde.
  • auteurs: Een door komma's gescheiden lijst van auteur-ID's.
  • kind van: Een ID van een pagina om alleen de onderliggende en onderliggende kleinkinderen in de vermelding te laten ophalen.
  • ouder: Lijst van de pagina's met de opgegeven pagina-ID als bovenliggend item. Om dit argument te laten werken, is de hiërarchische argument moet worden ingesteld op 0.
  • exclude_tree: Een door komma's gescheiden lijst of een reeks pagina-ID's om uit te sluiten met de onderliggende elementen.
  • aantal: Aantal pagina's dat moet worden opgehaald.
  • compenseren: Aantal pagina's dat van boven moet worden overgeslagen.
  • post_type: Het berichttype dat moet worden opgevraagd. Natuurlijk is het standaard ingesteld op pagina.
  • post_status: Een door komma's gescheiden lijst met poststatustypen die moeten worden opgenomen.

Controleren of de query berichten retourneert: have_posts ()

Zonder parameters te accepteren, keert deze functie eenvoudig terug TRUE als de query alle records en VALSE als niet.

Working the Loop: de post()

De Codex zegt dat het "de post-index in de lus herhaalt". Het doet verschillende dingen:

  1. Het haalt het volgende record uit de query op.
  2. Het maakt de $ bericht gegevens.
  3. Het zet de in de lus parameter naar TRUE.

Opzetten $ bericht: setup_postdata ()

Deze functie spreekt ook voor zichzelf: het stelt de globale berichtgegevens in. Laten we eens kijken wat de Codex daarover zegt:

setup_postdata () vult de globale variabelen $ id, $ authordata, $ currentday, $ currentmonth, $ page, $ pages, $ multipage, $ more, $ numpages, die veel sjabloontags helpen werken in de huidige berichtcontext. Het wijst de global niet toe $ bericht variabel, maar lijkt te verwachten dat zijn argument een verwijzing ernaar is.

De huidige lus wissen: rewind_posts ()

Weer een andere functie waarvan de naam de functionaliteit aangeeft: met deze functie wordt de Loop eenvoudigweg "teruggespoeld", zodat u hem later opnieuw kunt uitvoeren.

Resetten $ berichtwp_reset_postdata ()

Met deze functie wordt het globale opnieuw ingesteld $ bericht variabele terug naar het eerste bericht in de hoofdquery. Het is beter om deze na een secundaire query te gebruiken.

De query opnieuw instellen: wp_reset_query ()

Deze moet worden gebruikt als de hoofdquery is gewijzigd (met de query_posts () functie of de pre_get_posts actie die we in het volgende gedeelte zullen zien) zodat de hoofdvraag kan worden gereset.

Controleren of huidige zoekopdracht de hoofdquery is: is_main_query ()

Deze is een voorwaardelijke tag die terugkeert TRUE als de huidige query de hoofdquery en is VALSE als het dat niet is. Eenvoudig, toch?

Controleren of we in de lus zijn: in de lus()

Een andere voorwaardelijke tag is in de lus() dat komt eenvoudig terug TRUE of VALSE als uw code binnen de Loop loopt of niet.

Einde van deel twee

Daar ga je - nu weet je (waarschijnlijk) alle functies gerelateerd aan WP_Query! Houd ons in de gaten voor het volgende deel waar we meer over zullen leren WP_Query gerelateerde acties en filters.

Heeft u opmerkingen of iets om aan dit onderdeel toe te voegen? Voel je vrij om je gedachten te delen door hieronder te reageren. En als je het artikel leuk vond, vergeet dan niet om het met je vrienden te delen!