✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

Leitfaden: Ändern Sie die globale Abfrage von WordPress

12

In einigen Fällen müssen Sie möglicherweise die globale Post-Abfrage ändern, die WordPress auf jeder Seite durchführt, die Sie besuchen – sowohl im Admin- als auch im Frontend-Bereich. In diesem Leitfaden sehen wir uns an, welcher Hook zu verwenden ist und wie Sie die Abfrageargumente nach Ihren Wünschen ändern können.

Welchen Haken verwenden

Zuerst müssen Sie wissen, zu welchem ​​Hook Sie Ihren Code hinzufügen müssen. Wir brauchen einen Hook, der passiert, nachdem WordPress alle Argumente eingerichtet hat, aber bevor die eigentliche Abfrage ausgeführt wird. Dazu verwenden wir die Aktion pre_get_posts.

In diesem Hook erhalten Sie einen Parameter; Dies ist ein WP_QueryObjekt, mit dem WordPress später die Abfrage ausführen wird. Sie nehmen Änderungen am Objekt vor – müssen es aber nicht zurückgeben, da WordPress die Abfrage mit dem geänderten Objekt ausführt.

add_action('pre_get_posts', function($query) { // Add your code here });

Um die Abfrage zu ändern, müssen Sie höchstwahrscheinlich einige bedingte Tags verwenden, um die Fälle anzugeben, in denen Sie sie ändern möchten. Beispielsweise möchten Sie die Abfrage möglicherweise nur auf Suchergebnisse oder Kategorieansichten ausrichten.

Bedingte Tags

WordPress hat eine Reihe von bedingten Tags, mit denen Sie angeben können, in welchen Fällen Sie Ihren Code hinzufügen möchten. Ein bedingtes Tag ist einfach eine Funktion, die wahr oder falsch zurückgibt, je nachdem, in welchem ​​​​Zustand sich WordPress befindet. Beispiele für gängige bedingte Tags sind is_admin()die Überprüfung, ob wir uns derzeit im Admin- oder Frontend befinden, is_singular()ob wir uns bei einem einzelnen Beitrag oder einer Seite im Frontend befinden, und is_search()wenn wir uns auf der Suchergebnisseite befinden.

Beachten Sie, dass der Hook pre_get_postssowohl für den Administrator als auch für das Frontend ausgeführt wird. Wenn Sie nur die globale Abfrage im Frontend beeinflussen möchten, müssen Sie Ihren Code in eine if-Prüfung des Bedingungs-Tags einschließen is_admin().

Hinweis zu bedingten Tags inpre_get_posts

Bedingte Tags sind großartig und alles, aber es gibt einige Dinge zu beachten, wenn Sie diese innerhalb verwenden pre_get_posts.

Zunächst müssen Sie sich mit dem Tag vertraut machen is_main_query(). Die Aktion pre_get_postswird tatsächlich mehrmals für jeden Seitenladevorgang ausgeführt. Wird zum Beispiel pre_get_postsbeim Generieren jedes Menüs (einschließlich derjenigen in Widgets) ausgeführt. Um die eigentliche globale Suchanfrage zu modifizieren, z. B. Beiträge für ein Kategoriearchiv oder Suchergebnisse, müssen Sie die "Hauptsuche" mit zielen is_main_query().

Zweitens müssen Sie sich der Fälle bewusst sein, in denen Sie die bedingten Tags auf das bereitgestellte Objekt überprüfen müssen, anstatt die Funktion „unabhängig” aufzurufen. Wenn Sie bedingte Tags verwenden, schreiben Sie es normalerweise so:

if (is_main_query()) { // Do stuff }

Wenn Sie jedoch verwenden pre_get_posts, müssen Sie einige bedingte Tags auf das Objekt anwenden. Zum Beispiel:

is_main_query()Sie sollten immer das in bereitgestellte Objekt überprüfen pre_get_posts. Lesen Sie die Dokumentation für pre_get_posts für weitere Informationen.

Dies ist ein Beispiel für die Überprüfung, ob wir uns nicht im Admin-Bereich befinden und ob wir uns bei der Hauptpost-Abfrage befinden:

Ändern oder Hinzufügen von Argumenten

Da wir mit einem WP_QueryObjekt arbeiten, können Sie in der Dokumentation von WP_Query nachlesen, wie Sie Ihre Argumente erstellen, um die Posts-Abfrage anzupassen. Beachten Sie, dass die Argumente bereits ausgefüllt sind. In diesem Fall müssen Sie vorhandene Werte anhängen oder ändern. Oder entfernen Sie diejenigen, die Sie entfernen möchten.

Sie verwenden die set()Funktion für das WP_QueryObjekt, um Argumente festzulegen. Die Methode akzeptiert zwei Argumente, den Argumentschlüssel und zweitens den Wert. Das Festlegen des posts_per_pageArguments würde beispielsweise wie folgt erfolgen:

In Fällen, in denen Sie ein bereits vorhandenes Argument anhängen oder ändern möchten, würden Sie dies normalerweise tun, indem Sie zuerst das vorhandene Argument in einer Variablen speichern. Dazu können Sie die Methode verwenden get(). Dann ändern Sie die Variable, indem Sie Arrays oder so weiter anhängen oder zusammenführen. Und schließlich verwenden Sie set(), um die geänderte Variable wieder im Abfrageobjekt zu ersetzen. Ich empfehle die Verwendung var_dump()von auf dem Objekt, um zu sehen, was es enthält, und dies ist auch eine gute Möglichkeit, um zu überprüfen, ob Ihre bedingten Tags korrekt sind.

Hier ist ein kurzes Beispiel für die Verwendung get()(einfach prüfen, ob es leer ist), und wenn ja, fügen Sie Ihre eigenen Argumente mit hinzu set().

Hinweis zu tax_query

WordPress hat separate Unterklassen für den Umgang mit dem WP_Tax_QueryTeil Taxonomie () innerhalb von WP_Query. Wenn Sie komplexere Taxonomie-Abfrageänderungen vornehmen müssen, ist die pre_get_postsAktion möglicherweise zu früh. Einige Werte sind möglicherweise leer, da sie später ausgefüllt werden. In diesem Fall ist es möglicherweise besser, die Aktion parse_tax_queryanstelle von zu verwenden pre_get_posts. Lesen Sie die Dokumentation für diesen Hook, um zu sehen, ob dies für Sie geeignet ist.

Fazit

Die Argumente, die Sie hinzufügen oder ändern, hängen ganz davon ab, was Sie tun möchten, aber Sie sollten jetzt einen Einblick in Strategien haben, um die globale Abfrage zu erfassen. WP_QueryWenn Sie einen Einblick in das Objekt und die Verwendung seiner Argumente benötigen, ist mein Beitrag zum Abfragen von Beiträgen möglicherweise von Interesse.

Aufnahmequelle: awhitepixel.com

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen