WP_Query vs query_posts vs get_posts vs pre_get_posts

Snelle analyse

  • query_posts - niet gebruiken, behalve in zeldzame randgevallen
  • pre_get_posts - gebruik dit als u de standaardquery op een pagina wilt wijzigen
  • nieuwe WP_Query - gebruik om verschillende resultaten van de hoofdquery te krijgen
  • get_posts - hetzelfde als WP_Query, retourneert alleen resultaten in arrayindeling
  • query_posts

    Het gebruik van query_posts wordt niet meer aanbevolen. Er zijn betere manieren om te bereiken wat u probeert te bereiken. Probeert u de hoofdvraag te wijzigen? Gebruik de actie pre_get_posts om de resultaten te filteren (zie hieronder). query_posts gooit de oorspronkelijke hoofdquery opzij (nadat deze al is uitgevoerd) en maakt een nieuwe hoofdquery. Het vervangt alle post-gerelateerde globale variabelen en resulteert in een volledig nieuwe databaseaanroep. Er is simpelweg geen reden om de bestaande zoekopdracht niet alleen te wijzigen. Ik weet zeker dat er een aantal randgevallen zijn waar het gebruikt zou moeten worden, maar ik kan er niet uit denken. Gebruik een van de onderstaande opties, want deze zijn meer dan waarschijnlijk beter geschikt.

    pre_get_posts

    Dit is een filter. Hiermee wordt de hoofdquery van een pagina gewijzigd. We willen bijvoorbeeld het aantal resultaten dat wordt teruggestuurd op de startpagina wijzigen ...

     functie tj_change_home_number ($ query) {if (is_home ()) {$ query-> set ('posts_per_page', 2); terug te keren; }} add_action ('pre_get_posts', 'tj_change_home_number'); 

    Dit zou de hoofdvraag wijzigen om alleen 2 berichten op de startpagina te retourneren.

    WP_Query

    De belangrijkste query voor elke sjabloon die wordt genoemd, is een exemplaar van WP_Query . Wanneer u interactie hebt met de globale berichtvariabelen binnen een sjabloon, is dat het resultaat van WP_Query . De use cases hiervoor zijn talrijk, maar net als get_posts zou ik een nieuwe WP_Query declareren om gerelateerde posts te trekken, iets in die zin. Houd er rekening mee dat als u de functie the_post () uitvoert terwijl u een nieuw WP_Query doorloopt, de functie wp_reset_postdata () uitvoert nadat u klaar bent met lus om de globale berichtgegevens terug te zetten naar de oorspronkelijke hoofdquery .

    get_posts

    Door get_posts te gebruiken, roep je in feite een nieuw WP_Query aan en krijg je die informatie geretourneerd in een array-indeling. Ik gebruik gewoonlijk get_posts wanneer ik berichten retourneer voor een schuifregelaar op de startpagina of een aantal gerelateerde berichten in een zijbalk opneem. WP_Query kan net zo goed worden gebruikt, maar het is een goede manier om een ​​reeks berichten te ontvangen zonder de globale berichtvariabelen te wijzigen. Naar mijn mening is het de meest simplistische en eenvoudigst te gebruiken. Er zijn geen functieaanroepen nodig nadat uw gegevens zijn geretourneerd, maar gewoon door een array lopen.

    Dit kan een beetje verwarrend zijn, dus voel je vrij om vragen te stellen in de reacties hieronder.

    Referentie:
    WP_Query
    pre_get_posts
    query_posts
    get_posts

Zie Ook