Standardmäßig führt WordPress auf jeder von Ihrer Site angezeigten Seite eine Abfrage aus, deren Art von der Art der angezeigten Seite bestimmt wird. Wenn also eine statische Seite angezeigt wird, führt WordPress eine Abfrage aus, um die Seite mit der entsprechenden ID anzuzeigen. Wenn eine Archivseite angezeigt wird, ruft die Abfrage alle Beiträge in diesem Archiv ab.
Aber manchmal möchten Sie etwas anders machen. Entweder im Hauptinhalt Ihrer Seite oder an anderer Stelle auf der Seite (z. B. in der Seitenleiste oder Fußzeile) möchten Sie möglicherweise einen bestimmten Inhalt anzeigen, der von der Standardabfrage nicht ausgegeben wird.
Die gute Nachricht ist, dass WordPress das mit der WP_Query
Klasse. Diese Klasse stellt Ihnen eine große Anzahl von Parametern zur Verfügung, mit denen Sie definieren können, welcher Inhalt ausgegeben werden soll (was nicht auf Posts beschränkt sein muss) und dann eine Schleife schreiben, die den Inhalt genau so anzeigt, wie Sie es möchten.
In dieser neunzehn-teiligen Serie zum Thema Mastering WP_Query
, Baris Unver und ich führen Sie durch und durch WP_Query
Wenn Sie die Serie abgeschlossen haben, können Sie sie in verschiedenen Szenarien verwenden und die Art und Weise anpassen, in der WordPress die Daten in der Datenbank Ihrer Site abfragt.
In dieser Einführung werde ich Folgendes behandeln:
WP_Query
?WP_Query
?WP_Query
ist eine von WordPress bereitgestellte Klasse. Die Tatsache, dass es sich um eine Klasse handelt, bedeutet, dass Sie mit dieser Klasse schnell auf die Variablen, Prüfungen und Funktionen zugreifen können, die in dieser Klasse im WordPress-Kern codiert sind, ohne sich Gedanken darüber machen zu müssen, dass der gesamte Code selbst geschrieben wird. Dies macht Ihren Code effizienter und zuverlässiger.
Wenn Sie genau wissen wollen, wie WP_Query
funktioniert unter der Haube, Sie können den Code in sehen Includes / query.php
Datei.
WP_Query
besteht aus vier Hauptelementen:
In der Praxis sieht das ungefähr so aus:
have_posts ()) // Beginne, die Abfrageergebnisse zu durchlaufen. while ($ query-> have_posts ()) $ query-> the_post (); // Inhalt der abgefragten Post-Ergebnisse finden Sie hier. // Stellen Sie die ursprünglichen Postdaten wieder her. wp_reset_postdata (); ?>
Sie könnten Ihre Argumente definieren, wenn Sie die Abfrage selbst schreiben, aber ich bevorzuge es, diese zuerst zu definieren, da sie die Dinge sauber hält.
Im obigen Beispiel habe ich hinzugefügt wp_reset_postdata ()
nach jeder Abfrage. Dies ist wichtig, da die Abfrage auf die Hauptabfrage zurückgesetzt wird, die auf dieser Seite ausgeführt wird.
Zum Beispiel, wenn Sie verwenden WP_Query
Um eine Abfrage in der Seitenleiste auszuführen, verwenden Sie wp_reset_postdata ()
sagt WordPress effektiv, dass wir uns immer noch auf der gerade angezeigten Seite befinden und mit der Standardabfrage für diese Seite funktionieren sollten.
Wenn Sie dies nicht tun, können alle anderen Abfragen, die auf der Seite ausgeführt werden (einschließlich der Standardabfrage), möglicherweise fehlerhaft sein, und bedingte Tags, die prüfen, welche Art von Seite angezeigt wird, funktionieren nicht.
Wenn Sie das nicht benutzt haben WP_Query
Vor dem Unterricht fragen Sie sich vielleicht, warum Sie anfangen sollten. Hier werde ich mich auf zwei Aspekte konzentrieren: Warum verwenden? WP_Query
über andere Methoden zum Erstellen benutzerdefinierter Abfragen und Szenarien, in denen Sie möglicherweise verwenden möchten WP_Query
.
WP_Query ist nicht die einzige Methode zum Erstellen einer benutzerdefinierten Abfrage. Es gibt vier weitere:
pre_get_posts
get_posts ()
get_pages ()
query_posts ()
(was du vermeiden sollst, wie ich erkläre)Ich werde nicht sehr detailliert darauf eingehen, wie diese funktionieren, aber es ist hilfreich zu wissen, wann sie verwendet werden:
pre_get_posts
ist ein Haken, der die Hauptabfrage ändert. Sie können es mit einem bedingten Tag verwenden, um zu überprüfen, ob ein bestimmter Seitentyp (z. B. die Startseite) angezeigt wird, und dann die ablaufende Abfrage zu ändern (z. B. um die letzten drei Beiträge zu entfernen, wenn Sie ' wieder an anderer Stelle auf der Seite anzeigen). Dies ist eine sehr effiziente Methode zum Ändern der Hauptabfrage und sollte Ihre erste Anlaufstelle sein, wenn Sie dies möchten. Sie können es jedoch nicht verwenden, um eine komplett neue Abfrage zu erstellen.get_posts ()
und get_pages ()
sind sehr ähnlich, wobei der Hauptunterschied aus ihren Namen ersichtlich ist. Diese Vorlagen-Tags verwenden tatsächlich das WP_Query
Klasse, also ist es eine andere Möglichkeit, das Gleiche zu tun, aber fügen Sie einen zusätzlichen Schritt hinzu, weil sie die WP_Query
Klasse statt dir direkt zu tun. Sie können sie nur verwenden, um Beiträge oder Seiten abzufragen WP_Query
selbst ist leistungsfähiger und lässt Sie fast alles in Ihrer Datenbank abfragen.query_posts ()
ändert die Hauptabfrage, sollte jedoch nicht in Plugins oder Themes verwendet werden. Dies liegt daran, dass die Hauptabfrage ausgegeben wird und von vorne beginnt und die Hauptabfrage durch eine neue Abfrage ersetzt wird. Es ist außerdem anfällig für Fehler, insbesondere bei Seitenumbrüchen, und ist ineffizient und wirkt sich auf die Ladezeiten Ihrer Seite aus. Wenn Sie die Hauptabfrage ändern müssen, verwenden Sie pre_get_posts
Wenn Sie eine vollständig neue Abfrage erstellen möchten, verwenden Sie WP_Query
.Das folgende Diagramm, das von Andrey „Rarst“ Savchenko unter der Creative-Commons-Lizenz veröffentlicht wurde, hat folgenden Sinn:
Es gibt viele Szenarien, in denen WP_Query
wird nützlich sein, und ich kann sie hier nicht alle behandeln, aber hier ist ein Überblick:
Das WP_Query
Klasse ist großartig. Ich erstelle viele Websites, für die benutzerdefinierte Abfragen erforderlich sind, und benutze sie häufig. Aber es kommt nicht ohne Nachteile. Hier sind einige Dinge, die Sie beachten sollten:
WP_Query
. Erstellen Sie stattdessen einfach eine Vorlagendatei für diesen Archiv- oder Inhaltstyp und ändern Sie die Schleife in dieser Vorlagendatei.WP_Query
eine ganz neue Abfrage erstellen. Verwenden Sie stattdessen pre_get_posts
Ändern Sie die Hauptabfrage zusammen mit einem bedingten Tag, um herauszufinden, wo genau Sie es tun möchten.Das WP_Query
class ist ein leistungsfähiges und äußerst nützliches Werkzeug, um benutzerdefinierte Abfragen zu erstellen und das Verhalten Ihrer WordPress-Site genau so zu gestalten, wie Sie es möchten. Wie wir gesehen haben, gibt es Zeiten, in denen Sie andere Methoden verwenden würden, um benutzerdefinierte Abfragen zu erstellen, aber es gibt eine Vielzahl von Anwendungen.
Im Rest dieser Serie werden wir Sie durch die Details der Verwendung führen WP_Query
und das Beste daraus machen.