WP_Query und query_posts vs get_posts vs pre_get_posts

Schnellzusammenbruch

  • query_posts - nicht verwenden, außer in seltenen Fällen
  • pre_get_posts - Verwenden Sie diese Option, wenn Sie die Standardabfrage auf einer Seite ändern möchten
  • new WP_Query - verwendet, um andere Ergebnisse von der Hauptabfrage zu erhalten
  • get_posts - wie WP_Query, gibt nur Ergebnisse im Array-Format zurück
  • query_posts

    Die Verwendung von query_posts wird nicht mehr empfohlen. Es gibt bessere Möglichkeiten, um das zu erreichen, was Sie erreichen möchten. Versuchen Sie, die Hauptabfrage zu ändern? Verwenden Sie die Aktion pre_get_posts, um die Ergebnisse zu filtern (siehe unten). query_posts wirft die ursprüngliche Hauptabfrage zur Seite (nachdem sie bereits ausgeführt wurde) und erstellt eine neue Hauptabfrage. Es ersetzt alle postbezogenen globalen Variablen und führt zu einem vollständig neuen Datenbankaufruf. Es gibt einfach keinen Grund, die bestehende Abfrage nicht einfach zu ändern. Ich bin mir sicher, dass es einige Grenzfälle gibt, in denen es verwendet werden sollte, aber ich kann mir nichts von meinem Kopf vorstellen. Verwenden Sie eine der folgenden Optionen, da sie wahrscheinlich besser geeignet sind.

    pre_get_posts

    Dies ist ein Filter. Dies ändert die Hauptabfrage zu einer Seite. Zum Beispiel möchten wir die Anzahl der Ergebnisse ändern, die auf der Homepage zurückgegeben werden ...

     Funktion tj_change_home_number ($ query) {if (is_home ()) {$ query-> set ('posts_per_page', 2); Rückkehr; }} add_action ('pre_get_posts', 'tj_change_home_number'); 

    Dies würde die Hauptabfrage so ändern, dass nur 2 Beiträge auf der Homepage zurückgegeben werden.

    WP_Query

    Die Hauptabfrage für jede aufgerufene Vorlage ist eine Instanz von WP_Query . Wenn Sie mit den globalen Post-Variablen in einer Vorlage interagieren, ist dies das Ergebnis von WP_Query . Die Anwendungsfälle dafür sind zahlreich, aber wie bei get_posts würde ich eine neue WP_Query zum Zwecke des Ziehens verwandter Beiträge deklarieren, etwas in dieser Richtung. Beachten Sie jedoch, dass bei Ausführung der Funktion " the_post ()" während der Ausführung einer neuen WP_Query die Funktion " wp_reset_postdata ()" ausgeführt wird, nachdem Sie die globalen Postdaten in die ursprüngliche Hauptabfrage zurückgesetzt haben.

    get_posts

    Wenn Sie get_posts verwenden, rufen Sie praktisch eine neue WP_Query auf und erhalten diese Informationen in einem Array-Format zurück. Normalerweise verwende ich get_posts, wenn ich Posts für einen Slider auf der Homepage zurückschicke oder verwandte Posts in einer Sidebar anrufe. WP_Query könnte genauso einfach verwendet werden, aber es ist eine gute Möglichkeit, ein Array von Posts zu erhalten, ohne die globalen Post-Variablen zu verändern. Meiner Ansicht nach ist es am einfachsten und am einfachsten zu benutzen. Nach dem Zurückgeben der Daten sind keine Funktionsaufrufe erforderlich. Sie müssen lediglich ein Array durchlaufen.

    Dies kann ein wenig verwirrend sein, so zögern Sie nicht, Fragen in den Kommentaren unten zu stellen.

    Referenz:
    WP_Query
    pre_get_posts
    query_posts
    get_posts

Siehe Auch