WP_Query-Argumente Status, Reihenfolge und Paginierung

In diesem Teil der Serie über das Mastering WP_Query, Sie werden einige der Argumente kennen lernen, die Sie mit verwenden können WP_Query Klasse, nämlich für:

  • Status
  • Auftrag
  • Seitennummerierung

Sie können diese Argumente verwenden, um geplante Beiträge aus der Datenbank abzurufen, Anhänge abzufragen, die Reihenfolge und die Reihenfolge der Beiträge zu ändern, um anzugeben, wie viele Beiträge angezeigt werden, und vieles mehr

Aber bevor Sie dies tun können, müssen Sie verstehen, wie Argumente funktionieren WP_Query.

Eine Zusammenfassung der Funktionsweise von Argumenten in WP_Query

Bevor wir anfangen, wollen wir kurz aufzeigen, wie die Argumente funktionieren WP_Query. Wenn du codierst WP_Query In Ihren Designs oder Plugins müssen Sie vier Hauptelemente einfügen:

  • Die Argumente für die Abfrage verwenden Parameter, die in diesem Lernprogramm behandelt werden
  • die Abfrage selbst
  • die Schleife
  • Fertigstellung: Schließen von Tags und Tags und Zurücksetzen der Post-Daten

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 (); ?>

Die Argumente sagen WordPress, welche Daten aus der Datenbank abgerufen werden sollen. Diese werden hier behandelt. Wir konzentrieren uns hier also nur auf den ersten Teil des Codes:

$ args = array (// Argumente für Ihre Abfrage.);

Wie Sie sehen, sind die Argumente in einem Array enthalten. Sie lernen, wie Sie diese codieren, während Sie dieses Tutorial durcharbeiten.

Kodierung Ihrer Argumente

Es gibt eine bestimmte Methode zum Codieren der Argumente im Array, die wie folgt lautet:

$ args = array ('parameter1' => 'value', 'parameter2' => 'value', 'parameter3' => 'value');

Sie müssen die Parameter und deren Werte in einfache Anführungszeichen setzen, verwenden => zwischen ihnen und trennen Sie sie mit einem Komma. Wenn Sie dies falsch verstehen, fügt WordPress möglicherweise nicht alle Ihre Argumente der Abfrage hinzu, oder Sie erhalten einen weißen Bildschirm.

Statusparameter

Wenn Sie wissen, ob Sie den Status eines Posts jemals von "Entwurf" in "Veröffentlicht" konvertiert haben oder möglicherweise in den Papierkorb legen, weist WordPress jedem Beitrag einen Status zu. Du kannst den ... benutzen Poststatus Parameter zum Abfragen von Beiträgen mit einem oder mehreren Status.

Die verfügbaren Argumente sind:

  • veröffentlichen: Ein veröffentlichter Beitrag oder eine Seite.
  • steht aus: Beitrag steht noch aus.
  • Entwurf: Ein Beitrag im Entwurfsstatus.
  • Auto-Entwurf: Ein neu erstellter Beitrag ohne Inhalt.
  • Zukunft: Ein Post, der in der Zukunft veröffentlicht werden soll.
  • Privatgelände: Nicht sichtbar für Benutzer, die nicht angemeldet sind.
  • erben: Eine Revision.
  • Müll: Post ist im Papierkorb.
  • irgendein: Ruft jeden Status mit Ausnahme des Poststatus mit ab 'exclude_from_search' auf true setzen (d. h. Müll und Auto-Entwurf).

Wenn Sie in Ihren Abfrageargumenten keinen Status angeben, wird WordPress standardmäßig verwendet veröffentlichen; Wenn der aktuelle Benutzer angemeldet ist, werden auch Beiträge mit dem Status "." Privatgelände. Wenn Sie eine Abfrage auf den Verwaltungsseiten ausführen, enthält WordPress auch die geschützten Status ZukunftEntwurf und steht aus standardmäßig.

Nehmen wir also an, Sie betreiben eine Ereignisseite und verwenden einen benutzerdefinierten Beitragstyp für Ereignisse, wobei das Veröffentlichungsdatum als Datum verwendet wird, an dem das Ereignis stattfindet. WordPress zeigt standardmäßig keine Ereignisse an, die noch nicht geschehen sind: Obwohl Sie sie geplant haben, liegt ihr geplantes Datum in der Zukunft, der Post-Status liegt also in der Zukunft.

Um dies zu umgehen, verwenden Sie einfach diese Argumente:

$ args = array ('post_type' => 'event', 'post_status' => 'future');

Dies zeigt nur die Ereignisse an, die noch nicht stattgefunden haben, da diese die Ereignisse haben werden veröffentlichen Status. Wenn Sie jedoch auch Ereignisse anzeigen möchten, die stattgefunden haben, können Sie ein Array von Poststatus verwenden, um mehr als einen einzuschließen:

$ args = array ('post_type' => 'event', 'post_status' => array ('future', 'publish'));

Das Poststatus Parameter ist wichtig, wenn Sie nach Anhängen fragen. Dies liegt daran, dass sie einen Status haben erben, nicht veröffentlichen. Um alle Anhänge abzufragen, verwenden Sie Folgendes:

$ args = array ('post_type' => 'attachment', 'post_status' => 'erben');

Alternativ können Sie ersetzen erben mit irgendein was hätte die gleiche Wirkung.

Auftragsparameter

Es gibt zwei Parameter, mit deren Hilfe Sie Beiträge abrufen können WP_Query: Auftrag und Sortieren nach. Wie du es erwartet hast, Auftrag legt die Reihenfolge fest, in der die Beiträge in der Schleife ausgegeben werden, und Sortieren nach legt fest, nach welchem ​​Feld in der Datenbank sie sortiert werden sollen.

Beginnen wir mit den Argumenten für Auftrag.

Der Auftragsparameter

Es gibt nur zwei Argumente, die Sie dafür verwenden können:

  • ASC: aufsteigende Reihenfolge vom niedrigsten zum höchsten Wert (1, 2, 3; a, b, c).
  • DESC: absteigende Reihenfolge vom höchsten zum niedrigsten Wert (3, 2, 1; c, b, a).

Diese sind ziemlich selbsterklärend. Wenn Sie kein Argument für angeben Auftrag, WordPress wird standardmäßig verwendet DESC.

Der orderby-Parameter

Sie können Ihre Beiträge nach verschiedenen Feldern sortieren:

  • keiner: Keine Bestellung (verfügbar ab Version 2.8).
  • ICH WÜRDE: Bestellung per Post-ID Beachten Sie die Großschreibung.
  • Autor: Bestellung nach Autor.
  • Titel: Sortieren nach Titel.
  • Name: Bestellung per Post Slug.
  • Art: Bestellung per Postart.
  • Datum: Bestellung nach Datum.
  • geändert: Nach letztem Änderungsdatum bestellen.
  • Elternteil: Bestellung per Post / Seiten-ID.
  • rand: Zufällige Reihenfolge.
  • Anzahl Kommentare: Reihenfolge nach Anzahl der Kommentare.
  • menu_order: Bestellung nach Seitenreihenfolge. Wird am häufigsten für Pages (mit dem Wert, den Sie der Metabox im Bildschirm "Seite bearbeiten" hinzufügen) und für Anhänge (mit den Ganzzahlfeldern im Dialogfeld "Mediengalerie einfügen / hochladen") verwendet. Sie kann jedoch für jeden Post-Typ mit verwendet werden menu_order aktiviert.
  • meta_value: Sortiert nach dem Wert für einen Metaschlüssel (oder ein benutzerdefiniertes Feld). Dies funktioniert nur, wenn Sie auch eine meta_key Parameter in Ihren Argumenten. Meta-Werte sind alphabetisch und nicht numerisch sortiert (34 kommen also vor 4). 
  • meta_value_num: Reihenfolge nach numerischem Metawert. Wie bei meta_value, Sie müssen auch eine meta_key Argument in Ihrer Abfrage.
  • post__in: Bewahren Sie die Post-ID-Reihenfolge auf post__in Array.

Der Standardwert ist Datum, das Datum, an dem ein Beitrag veröffentlicht wurde.

Wenn Sie beispielsweise Ihre Posts nach Titel in aufsteigender Reihenfolge sortieren möchten, verwenden Sie diese Argumente:

$ args = array ('orderby' => 'title', 'order' => 'ASC');

Bestellung über mehrere Felder

Sie müssen sich nicht nur an ein Feld halten, um Ihre Beiträge zu sortieren. Um nach mehreren Feldern zu sortieren, verwenden Sie ein Array mit der Sortieren nach Parameter und (optional) mit der Auftrag Parameter, wenn Sie jedes Feld in einer anderen Reihenfolge sortieren möchten.

Nehmen wir an, Sie haben ein benutzerdefiniertes Feld für Bewertungen, das Sie zum Sortieren in einer E-Commerce-Site verwenden möchten. Sie können nach Bewertung und dann nach Titel in aufsteigender Reihenfolge folgendermaßen sortieren:

$ args = array ('orderby' => array ('meta_value_num', 'title'), 'order' => 'ASC', 'meta_key' => 'rating');

Beachten Sie, dass ich die aufgenommen habe meta_key Argument, um WordPress wissen zu lassen, welches benutzerdefinierte Feld ich verwende. Dies geschieht aufgrund der Art und Weise, wie WordPress Post-Metadaten speichert: nicht in der wp_posts Tisch, aber in der wp_postmeta Tabelle.

Aber was wäre, wenn Sie nach absteigender Reihenfolge und dann in aufsteigender Reihenfolge sortieren möchten? Sie verwenden einfach ein anderes Array:

$ args = array ('orderby' => array ('meta_value_num', 'title'), 'order' => array ('DESC', 'ASC'), 'meta_key' => 'rating');

Sie können auch nach mehreren Feldern sortieren, wenn Sie keine Post-Metadaten verwenden, um beispielsweise nach Post-Typ und Datum zu sortieren:

$ args = array ('orderby' => array ('type', 'date'), 'order' => array ('ASC', 'DESC'));

Dies würde nach Beitragstyp in aufsteigender Reihenfolge und dann in jedem Beitragstyp nach Datum in absteigender Reihenfolge sortieren.

Paginierungsparameter

Die nächsten Parameter sind für die Paginierung. Hier können Sie festlegen, wie viele Posts abgefragt werden und wie die Paginierung bei der Ausgabe funktioniert.

Die verfügbaren Parameter sind:

  • nopaging (boolean): Alle Beiträge anzeigen oder Paginierung verwenden. Der Standardwert ist 'falsch', Verwenden Sie die Paginierung.
  • posts_per_page (int): Anzahl der pro Seite anzuzeigenden Beiträge.
  • posts_per_archive_page (int): Anzahl der Beiträge, die nur auf pro Archivseite angezeigt werden.
  • Versatz (int): Anzahl der Beiträge zu verdrängen oder vorbei gehen.
  • paginiert (int): Die Seite im Archiv, von der die Beiträge angezeigt werden.
  • Seite (int): Anzahl der Seiten für eine statische Titelseite. Zeigen Sie die Beiträge an, die normalerweise nur auf Seite X einer statischen Startseite angezeigt werden.
  • ignore_sticky_posts (boolean): Ignoriere die Post-Stickiness-Standardwerte falsch.

Schauen wir uns einige Beispiele an. 

Anzahl der Beiträge und Gegenposten

So zeigen Sie beispielsweise die fünf neuesten Beiträge an:

$ args = array ('posts_per_page' => '5');

Oder um fünf aktuelle Beiträge mit Ausnahme des neuesten anzuzeigen:

$ args = array ('posts_per_page' => '5', 'offset' => '1');

Beachten Sie, dass Sie zwar Beiträge aus den letzten sechs Beiträgen in der Datenbank abrufen, diese jedoch weiterhin verwenden 'posts_per_page' => '5' da dies die Anzahl der Beiträge ist, die ausgegeben werden.

Wenn Sie dies etwas näher betrachten, können Sie zwei Abfragen schreiben: eine, um den neuesten Beitrag anzuzeigen, und eine, um zehn weitere Beiträge anzuzeigen, die diesen Beitrag nicht enthalten:

$ args = array ('posts_per_page' => '1'); // Abfrage und Schleife gehen hier ebenso wie das Zurücksetzen von Beiträgen. $ args = array ('posts_per_page' => '10', 'offset' => '1'); // Zweite Abfrage, Schleife und Zurücksetzen gehen hier.

Sie können auch verwenden posts_per_page anzeigen alles Beiträge:

$ args = array ('posts_per_page' => '-1');

Klebrige Beiträge

Normalerweise werden Ihre klebrigen Beiträge in jeder Abfrage zuerst angezeigt: Wenn Sie dies überschreiben möchten, verwenden Sie ignore_sticky_posts:

$ args = array ('posts_per_page' => '5', 'ignore_sticky_posts' => true);

Die obigen Argumente geben die letzten fünf Beiträge zurück, unabhängig davon, ob sie klebrig sind oder nicht.

Wenn Sie nur klebrige Beiträge anzeigen möchten, müssen Sie die verwenden get_option () Funktion und die post__in Argument wie folgt:

$ sticky = get_option ('sticky_posts'); $ args = array ('posts_per_page' => '5', 'post__in' => $ sticky);

Das Obige würde die letzten fünf klebrigen Pfosten anzeigen: Wenn weniger als fünf (z. B. drei) klebrige Pfosten vorhanden sind, werden nicht klebrige Pfosten angezeigt, sondern nur die letzten drei klebrigen Pfosten.

Paginierung im Archiv

Sie können nicht nur festlegen, wie viele Beiträge aus der Datenbank abgerufen werden, sondern auch über Paginierungsparameter, um festzulegen, wie die resultierenden Beiträge auf Archiv- und Suchseiten gepagelt werden.

So könnten Sie beispielsweise auf einer Archivseite mit diesem Code 20 Beiträge pro Seite im Archiv anzeigen:

$ args = array ('posts_per_archive_page' => '20');

Beachten Sie das posts_per_archive_page Argument wird überschrieben posts_per_page.

Sie können auch nur die Seiten ausgeben, die auf einer bestimmten Seite in paginierten Seiten erscheinen würden. Wenn Sie beispielsweise die 20 Beiträge anzeigen möchten, die auf der dritten Seite des obigen Beispiels erscheinen würden, würden Sie Folgendes verwenden:

$ args = array ('posts_per_archive_page' => '20', 'paged' => '3');

Eine alternative Methode zum Abfragen der gleichen Beiträge wäre die Verwendung von Versatz Streit:

$ args = array ('posts_per_page' => '20', 'offset' => '40');

Dies überspringt die ersten 40 Beiträge (die sich auf den ersten beiden Archivseiten befinden würden) und ruft die nächsten 20 Beiträge ab (die sich auf der dritten Archivseite befinden.) Eines der Dinge, die ich an WordPress so sehr liebe, ist, dass es Ihnen so oft mehr gibt ein Weg, um etwas zu erreichen!

Sie können die Paginierung auch ganz deaktivieren, um sicherzustellen, dass alle Beiträge auf derselben Seite angezeigt werden:

$ args = array ('nopaging' => true);

Zusammenfassung

Das WP_Query class bietet Ihnen viel Flexibilität bei der Festlegung, wie viele Posts Sie abfragen möchten, in welcher Reihenfolge Sie sie anzeigen möchten und welchen Status Sie anzeigen möchten.

Einige dieser Argumente sind unerlässlich, um bestimmte Arten von Beiträgen abzufragen (z. B. 'post_status' => 'geerbt' für Anhänge), während andere Ihnen einfach mehr Kontrolle über die Ausführung Ihrer Abfragen geben.

Mit diesen Parametern können Sie benutzerdefinierte Abfragen erstellen, die weitaus mehr tun, als nur die zuletzt veröffentlichten Beiträge auszugeben.