Felipe Elia Tipps für WordPress

WordPress ist ein CMS und daher ist die Inhaltsmanipulation eine der Hauptsäulen des Tools. In diesem Beitrag werden Sie den von WP verwendeten Prozess verstehen, um abzurufen, was angezeigt werden muss, und auch, wie es möglich ist, diesen Prozess zu ändern.

der Zweck dieses Textes ist keineswegs ein Ersatz für die offizielle Dokumentation, die immer konsultiert werden sollte. Ihr Ziel ist es, an einem Ort zu platzieren, was Anfänger wissen sollten, bevor sie nach weiteren Informationen suchen.

Was ist eine WordPress-Abfrage?

Query bedeutet auf Englisch query und wird normalerweise für eine Anweisung in SQL (Structured Query Language) verwendet. In WordPress nennen wir Abfragen die Abfragen nach Inhalten, die über die Klasse wp_query .

Was ist WP_Query?

WP_Query ist die PHP-Klasse hinter allen Suchen nach Inhalten in WordPress. Es akzeptiert mehrere Parameter in seiner Konstruktion, einschließlich Post-Typen, Metadaten, Taxonomien und Daten, sowie die Möglichkeit, benutzerdefinierte Parameter zu erstellen.

Die wp_query-Klasse wird bei allen Anfragen an Ihre Site ausgelöst, mit Ausnahme von möglicherweise sehr seltenen Ausnahmen für Plugin-gesteuerte Adressen, die den normalen Ablauf unterbrechen. Jedes Mal, wenn wir eine Seite, einen Beitrag, einen Taxonomiebegriff usw. aufrufen. WordPress interpretiert die angeforderte Adresse über die Rewrite-API und erstellt eine WP_Query basierend auf den interpretierten Argumenten.

Bedingte Tags und WP_Query

Erstellen Sie Ihre eigenen Schleifen: WP_Query und get_posts ()

Wenn wir uns auf die Schleife in WordPress beziehen, sprechen wir von Iteration (ohne das n) durch die ausgewählten Beiträge. Normalerweise haben wir nur eine Schleife, die immer dem folgenden Code ähnelt:

Wenn es Beiträge gibt, iterieren Sie darüber. Die erste Anweisung in while ist the_post() , die WordPress anweist, die Variablen des nächsten Posts der Schleife über die setup_postdata() -Methode der wp_query-Klasse in die globale Variable $post wp_query .

Dies ist das Erscheinungsbild der Hauptschleife, dh die Iteration durch die Menge der Beiträge, die WordPress beim Dekodieren der Anforderung und beim Suchen nach dem entsprechenden Inhalt gefunden hat. Wenn wir einen anderen Satz von Posts benötigen (verwandte Inhalte, Inhalte einer bestimmten Kategorie außerhalb Ihrer Datei oder Posts, die nach der Anzeige veröffentlicht wurden), können wir dies auf zwei Arten tun: Erstellen eines neuen wp_query-Objekts oder Aufrufen der Funktion get_posts (). Sie tun beide dasselbe, aber sie werden verschiedene Dinge zu Ihnen zurückkehren.

Erstellen einer Schleife mit WP_Query

ein einfaches Beispiel für das Erstellen einer Schleife mit WP_Query:

Beachten Sie, wie der Test und die Iteration auf have_posts() dort bleiben, genau wie the_post(), diesmal jedoch als Methoden der von uns erstellten Variablen.

Die Funktion wp_reset_postdata () dient dazu, die globale Variable $post in ihren Zustand vor unserer Abfrage zurückzusetzen, dh sie wird den Post von global $post global $wp_query , den wir später sehen werden.

Erstellen einer Schleife mit get_posts()

das gleiche Beispiel mit der Funktion get_posts():

die Funktion get_the_title () akzeptiert als Parameter einen Beitrag, der sich von dem in der globalen Variablen $post unterscheidet. Wenn Sie beispielsweise die funktion_content () verwenden müssen, müssen Sie die globale wie folgt ändern:

Unterschied zwischen WP_Query und get_posts()

Der grundlegende Unterschied besteht darin, worauf Sie Zugriff haben. Mit WP_Query haben Sie beispielsweise Zugriff auf die Anzahl der insgesamt gefundenen Beiträge ($query->found_posts) und die Anzahl der möglichen Seiten ($query->max_num_pages). Die Funktion get_posts() hingegen bringt einige bereits ausgefüllte Argumente und ist standardmäßig etwas schneller: Sie übergibt den Parameter no_found_rows als true , wodurch verhindert wird, dass die endgültige Abfrage die Option SQL_CALC_FOUND_ROWS und damit MySQL von der Übergabe der Gesamtmenge der gefundenen Zeilen.

globale WordPress wp_query und WordPress wp_the_query

Bei diesem Prozess der Interpretation der Anforderung und Generierung des wp_query-Klassenobjekts erstellt WordPress zwei globale Variablen: $wp_query, das Sie wahrscheinlich irgendwo gesehen haben, und $wp_the_query, das immer die Originalkopie dessen ist, was vom Benutzer angefordert wurde. Wenn jemand mit $wp_query herumspielt, können wir es zumindest mit $wp_the_query in seinen normalen Zustand zurückversetzen. Genau das macht die Funktion wp_reset_query().

Warum sollte query_posts() nicht in Themendateien verwendet werden?

Dies ist der Standardfluss einer Anforderung an eine Adresse Ihrer Site außerhalb des Dashboards:

sie sollten query_posts() nicht verwenden, da es zuvor aufgerufen wurde. Wenn Sie es erneut aufrufen, duplizieren Sie die Verarbeitung (fordern WordPress auf, eine weitere Abfrage durchzuführen) und ignorieren möglicherweise, was einige Plugins bereits verwendet haben.

Paging ist ein weiteres Beispiel dafür, wie die Verwendung von query_posts() Ihre Arbeit stören kann. Wenn Sie 15 Beiträge pro Seite in einer bestimmten Kategorie anzeigen und versuchen möchten, den Standard-WP-Betrag durch query_posts() zu überschreiben, haben Sie eine Situation, in der das erste Element auf der zweiten Seite das 16. sein sollte, aber tatsächlich ist es nur das 11.

Wie ändere ich die Hauptabfrage? Verwenden Sie pre_get_posts

Die Verwendung von query_posts() ist seit einiger Zeit nicht mehr ratsam. Seitdem haben viele erklärt, warum und Entwickler ermutigt, die Aktion pre_get_posts zu verwenden, mit besonderem Schwerpunkt auf Leo Bahiano, der die Aktion liebevoll Preguetinho nannte (die Verwendung von Wortspielen mit dem Preguetinho do Leo Bahiano ist in den Kommentaren erlaubt).

die Verwendung ist einfach. Um das Paging in der Suche zu vermeiden, können Sie beispielsweise den folgenden Code in functions.php Ihres Themas verwenden :

Der Code weist hook pre_get_posts seine Funktion zu, sodass seine Funktion jedes Mal ausgeführt wird, wenn eine Abfrage verarbeitet wird. Darin müssen wir sicherstellen, dass wir nur an den erforderlichen Abfragen arbeiten, also testen wir, ob wir uns wirklich im „vorderen“ Teil der Site befinden (auf diese Weise stören wir nichts vom Panel), wenn wir uns in der Hauptabfrage der Seite befinden, dh wenn die betreffende Abfrage $wp_the_query ist und wenn all dies zutrifft, ändern wir das Attribut posts_per_page in -1, was bedeutet keine Begrenzung der Beiträge.

ein weiteres Beispiel: löschen Sie eine Kategorie aus der Liste der Blogbeiträge

Wenn Sie viele Änderungen benötigen, können Sie sie alle in einer einzigen Funktion zusammenfassen:



+