WP_Query beherrschen Aktionen und Filter

Willkommen zum dritten Teil unserer Serie "Mastering WP_Query". Im vorherigen Teil haben wir 13 WordPress-Funktionen durchlaufen, die sich auf die beziehen WP_Query Klasse. In diesem Teil werden wir WordPress-Hooks (Filter und Aktionen) überprüfen, mit denen Sie in Verbindung stehen können WP_Query.

Also lasst uns ohne weiteres beginnen!

WP_Query-bezogene Filter

In der "Filters Reference" des Codex sind 16 WordPress-Filter unter dem Titel "WP_Query-Filter" aufgeführt. In diesem Abschnitt werden wir über sie sprechen. Dies wird ein ziemlich schneller Abschnitt sein, da es sich bei den meisten Filtern um verschiedene "Klauseln" einer Datenbankabfrage von WP_Query Klasse.

Wir werden gleich darauf zurückkommen, nachdem wir die Filter durchgearbeitet haben, die nicht mit den Klauseln zusammenhängen.

Filtern der Anzahl der gefundenen Beiträge für die Abfrage: found_posts

Mit diesem Filter können Sie die Anzahl der gefundenen Elemente ohne die Beschränkung ändern WP_Query's posts_per_page Streit.

Dieser Filter eignet sich besonders zum Erstellen von benutzerdefinierten Seitenumbrüchen. Mal sehen, was der Codex sagt:

Wenn Sie beispielsweise einen benutzerdefinierten Versatzwert in Ihren Abfragen deklarieren, zieht WordPress den Versatz NICHT vom Parameter $ wp_query-> found_posts ab (wenn Sie beispielsweise nach einem Versatz von 10 45 verwendbare Beiträge haben, ignoriert WordPress den versetzen und geben Sie found_posts immer noch einen Wert von 55).

Macht Sinn.

Filtern der auszuführenden Abfrage zum Abrufen der gefundenen Beiträge: found_posts_query

Die Anzahl der gefundenen Gegenstände wird mit berechnet SELECT FOUND_ROWS () Befehl in MySQL. Mit diesem Filter können Sie diesen Befehl in etwas anderes ändern, falls Sie die Anzahl der gefundenen Elemente auf andere Weise berechnen müssen.

Filtern der gesamten SQL-Abfrage: posts_request

Wenn Sie die abgeschlossene SQL-Abfrage ändern möchten, sollten Sie diesen Filter verwenden. Im Wesentlichen überschreibt es die gesamte SQL-Abfrage, die von der SQL-Anweisung erstellt wird WP_Query Klasse.

Filtern des Arrays, das die Abfrage zurückgibt: Beiträge_Ergebnisse

Wenn Sie das PHP ändern möchten Array Das WP_Query Mit der SQL-Abfrage generiert, können Sie diesen Filter verwenden. Es gibt ein gutes Beispiel für den Codex, damit Sie sehen können, wie er funktioniert.

(Bitte beachten Sie, dass dieser Filter die roh Array, das aus der SQL-Abfrage generiert wird.)

Filtern Sie das Array der abgerufenen Beiträge: the_posts

nicht wie Beiträge_Ergebnisse, das the_posts Der Filter wartet darauf, dass das Array intern verarbeitet wird. Dies bedeutet, dass das Array auf unveröffentlichte und verankerte Posts geprüft wird. Verwenden Sie diese Option, wenn Sie keine unveröffentlichten Beiträge in Ihrem Array wünschen.

Filtern der Feldliste (und der WÄHLEN Klausel) der Abfrage: posts_fields

Das WÄHLEN Die Klausel einer SQL-Abfrage bestimmt, welche Datenbankfelder aus den resultierenden Datenbankzeilen ausgewählt werden, und dieser Filter hilft Ihnen beim Filtern.

Filtern der GRENZE Klausel der Abfrage: post_limits

Das GRENZE Die Klausel einer SQL-Abfrage legt die Einschränkungen für die Abfrage fest, und dieser Filter hilft Ihnen beim Filtern.

Filtern der DISTINCT Klausel der Abfrage: posts_distinct

Das DISTINCT Die Klausel einer SQL-Abfrage gibt an, dass die Abfrage nur andere Ergebnisse zurückgeben soll. Mit diesem Filter können Sie sie filtern. Natürlich, WP_Query gibt keine eindeutigen Ergebnisse zurück, aber wenn Sie diesen Filter mit einer Funktion verwenden, die zurückgibt "DISTINCT", Die Abfrage wird angepasst, um nur andere Ergebnisse anzuzeigen.

Filtern der WOHER Klausel der Abfrage: posts_where

Das WOHER Die Klausel einer SQL-Abfrage wird zum Filtern von MySQL verwendet WÄHLEN, EINFÜGEN, AKTUALISIEREN oder LÖSCHEN Anweisungen, und dieser Filter hilft Ihnen, diesen Filter zu filtern. Während WP_Query Die Klasse erledigt die gesamte Arbeit, die zum Filtern der Ergebnisse erforderlich ist. Mit diesem Filter können Sie noch einen Schritt weiter gehen.

Filtern der WOHER Klausel der Abfrage, nachdem das Paging berechnet wurde: posts_where_paged

Dieser Filter ist eine Iteration der posts_where filter, den Sie für Paging-Abfragen verwenden können.

Filtern der WOHER Klausel einer Suchabfrage: posts_search

Eine weitere Wiederholung der posts_where Filter ist dieser Filter, mit dem Sie das ändern können WOHER Klausel einer Abfrage, mit der Suchergebnisse in WordPress abgerufen werden.

Filtern der BEITRETEN Klausel der Abfrage: posts_join

Das BEITRETEN Mit der Klausel einer SQL-Abfrage können Sie Ihren SQL-Befehl in mehreren Datenbanktabellen bearbeiten. Mit diesem Filter können Sie ihn filtern. Dies ist einer der fortgeschrittenen Teile von MySQL. Ich empfehle daher die Verwendung dieses Filters nicht, wenn Sie nicht ganz genau wissen, wie MySQL ist BEITRETENs Arbeit.

Filtern der BEITRETEN Klausel der Abfrage, nachdem das Paging berechnet wurde: posts_join_paged

Genauso wie posts_where_paged ist eine Wiederholung von posts_where, Dies ist eine Wiederholung der posts_join Filter, der für Paging-Abfragen funktioniert.

Filtern der SORTIEREN NACH Klausel der Abfrage: posts_orderby

Das SORTIEREN NACH Die Klausel einer SQL-Abfrage ordnet die Reihenfolge der Abfrage an. Mit diesem Filter können Sie die Reihenfolge filtern.

Filtern der GRUPPIERE NACH Klausel der Abfrage: posts_groupby

Das GRUPPIERE NACH Durch die Klausel einer SQL-Abfrage wird die Abfrage nach einem Datenbankfeld "gruppiert". Mit diesem Filter können Sie filtern, wie die Ergebnisse gruppiert werden sollen.

Alle Klauseln der Abfrage filtern: posts_clauses

Wenn Sie alle Klauseln gleichzeitig behandeln möchten, gibt es auch einen Filter dafür: posts_clauses. Dieser Filter deckt den WOHER, GRUPPIERE NACH, BEITRETEN, SORTIEREN NACH, DISTINCT, WÄHLEN, und GRENZEN Klauseln.

WP_Query-bezogene Aktionen

Jetzt haben wir die entsprechenden Filter überprüft WP_Query, Lasst uns zu den anderen Arten von Hooks übergehen: Aktionen.

Interferieren mit der Abfrage, bevor sie ausgeführt wird: pre_get_posts

Bevor die Abfrage analysiert wird, können Sie mit dieser Aktion mit der Abfrage interagieren (z. B. zusätzliche Abfragevariablen einfügen). Sehen wir uns ein kurzes Beispiel von Tom McFarlin an, um zu erfahren, wie man eine Kategorie von der Hauptschleife ausschließt:

set ('category__not_in', $ excluded); * / set_query_var ('category__not_in', $ excluded);  add_action ('pre_get_posts', 'tutsplus_exclude_category'); ?>

Behandeln Sie die Analyse der Abfrage: parse_query

nicht wie pre_get_posts, was in die Abfrage eingreift Vor Die Abfragevariablen werden gesetzt, die parse_query Aktion übernimmt den Prozess nach dem Die Abfragevariablen werden gesetzt. Daher sollten Sie diese Aktion verwenden, wenn Sie die aktuellen Variablen prüfen und entsprechend handeln möchten.

Ändern Sie das Post-Objekt: die Post

Der Begriff die Aktion ist etwas verwirrend, weil es der Name eines Action-Hooks ist, a WP_Query-verwandte Funktion und auch eine Methode der WP_Query Klasse.

Mit dieser Aktion können Sie, wie der Codex sagt, das Post-Objekt unmittelbar nach der Abfrage und Einrichtung ändern. Mit dieser Aktion können Sie die Ausgabe direkt ändern. Sehen wir uns ein kurzes Beispiel an:

'. __ ('FUNKTIONIERT', 'tutsplus'). '
'; add_action ('the_post', 'tutsplus_featured_badge'); ?>

Ende von Teil Drei

Aktionen und Filter sind immer ein lustiges Thema, über das man reden und schreiben kann. (Ich weiß ganz sicher, dass meine beiden Serien über WordPress-Aktionen und WordPress-Filter Spaß beim Schreiben gemacht haben und eine großartige Reaktion von unseren Lesern erhalten haben.) Ich hoffe, Ihnen hat dieser Teil so gut gefallen, wie ich es geschrieben habe.

Möchten Sie dem Artikel etwas hinzufügen? Schießen Sie einen Kommentar im Kommentarbereich weiter unten. Und wenn Ihnen der Artikel gefallen hat, vergessen Sie nicht, ihn mit Ihren Freunden zu teilen!

Wir sehen uns im nächsten Teil, in dem wir über die Eigenschaften und Methoden der WP_Query Klasse!