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

Leitfaden: Wie man Beiträge in WordPress abfragt

25

Welche Methoden stehen zum Erstellen einer benutzerdefinierten Post-Abfrage zur Verfügung, und wann werden sie am besten verwendet? Dieser Beitrag zielt darauf ab, ein solides Verständnis für zwei Methoden zum Abfragen von Beiträgen zu schaffen, wie man auf die Ergebnisse zugreift, wie man Argumente baut und schließlich, wie man danach aufräumt. Die beiden Methoden, die wir uns ansehen werden, sind get_posts()und WP_Query.

Wenn es darum geht, eine neue Post-Abfrage zu stellen, gibt es eigentlich zwei Möglichkeiten (zum Zeitpunkt des Schreibens). Die Wahl hängt wirklich nur von Ihren Vorlieben ab (und einigen geringfügigen Leistungseffekten). Eine Option kann die globale Schleife/Abfrage, in der Sie sich gerade befinden, durcheinanderbringen, wenn Sie sie nicht richtig handhaben. Mit einer Option handhaben Sie Objekte und mit der anderen Option handhaben Sie ein Array. Die Argumente zum Anpassen der Post-Abfrage sind jedoch identisch.

Globale Abfrage?

Wenn Sie sich nicht sicher sind, was ich mit „die globale Abfrage durcheinander bringen” meine, ist es das. WordPress macht immer eine globale Abfrage, je nachdem, auf welcher Seite Sie sich befinden. Wenn ein Besucher ein Kategoriearchiv besucht, hat WordPress eine Post-Abfrage dafür gemacht Das Thema würde normalerweise auf Posts in der Abfrage zugreifen, indem es „die Schleife” verwendet.Wenn wir eine neue Abfrage mit einer eigenen Schleife innerhalb dieser Schleife erstellen, müssen wir sicherstellen, dass die globale Abfrage von WordPress und unsere Abfrage getrennt behandelt werden.

Wenn Sie jedoch die Post-Abfrage von WordPress ändern möchten, ist das eine andere Geschichte. Ich habe einen anderen Beitrag, der ausführlich darauf eingeht, wie man das macht.

Schauen wir uns die beiden Optionen an, die wir haben, und wie wir damit umgehen. Danach sehen wir uns die Argumente zum Anpassen der Abfrage an. Beachten Sie, dass die Argumente für beide identisch sind.

Die zwei Methoden zum Abfragen von Beiträgen

Sie können Beiträge entweder mit der Funktion abfragen get_posts()oder eine neue Instanz von erstellen WP_Query.. Die erste Option gibt ein Array von Beiträgen zurück und in der zweiten behandeln Sie ein Objekt. Da get_posts()ein Array nur der Posts zurückgegeben wird, ist es normalerweise einfacher, dies überall dort zu verwenden, wo Sie möchten. Wenn Sie Ihre Abfrage jedoch paginieren möchten, sollten Sie unbedingt eine WP_QueryInstanz erstellen.

Die Funktion get_postsist eine Wrapper-Funktion, WP_Querywas bedeutet, dass sie die gleichen Argumente akzeptiert, aber get_postseinige zusätzliche „Alias”-Argumente hat. Die WordPress-Dokumentationsseite für get_posts listet keine möglichen Argumente auf (außer den Alias-Argumenten), sondern verweist für die Argumente auf die Dokumentationsseite für WP_Query. Wir werden uns die Argumente später genauer ansehen.

Wenn die Leistung ein Problem ist (dh die Website hat viele Posts), get_postsist dies schneller als die Verwendung, WP_Queryda die Berechnung für die Paginierung übersprungen wird.

Die Methode zum Durchlaufen Ihrer benutzerdefinierten Post-Abfrage unterscheidet sich je nach gewählter Methode. Sie sollten mit der gemeinsamen WordPress-Schleife vertraut sein, die in fast allen Designvorlagen verwendet wird:

if (have_posts()) { while (have_posts()): the_post(); // Access to each post; you can use template tags here endwhile; }

Schleifen mit WP_Query

Das Schleifen der Ergebnisse von using WP_Queryist genau das gleiche, außer dass wir uns speziell auf das Instanzobjekt in der Schleife beziehen. Wir müssen auch daran denken, den Status zurückzusetzen, nachdem wir mit der Schleife fertig sind, damit das globale Post-Objekt auf den vorherigen Zustand zurückgesetzt wird. Dazu verwenden wir wp_reset_postdata().

WP_QueryWenn Sie das von (im obigen Beispiel) instanziierte Objekt ausgeben $custom_query, finden Sie die vollständige Abfrage und die verwendeten Argumente. Die interessanten Teile hier sind die Eigenschaften ‘ found_posts‘ und ‘ posts‘. Die postsEigenschaft ‘ ‘ enthält das Ergebnis von Post-Objekten, die die Schleife durchlaufen wird. Die Anzahl der Posts, die Ihrer Suchanfrage entsprechen, wird in „ found_posts” zurückgegeben und ist nützlich, wenn Sie eine benutzerdefinierte Paginierung erstellen möchten. Teilen Sie diesen Wert mit der WordPress-Einstellung für die Anzahl der Beiträge pro Seite, um herauszufinden, wie viele Seiten Sie für Ihre Abfrage benötigen, oder beziehen Sie sich einfach auf die Eigenschaft „ max_num_pages“.

Hinweis: Wenn Sie get_postsWordPress verwenden, wird nur die postsEigenschaft „ ” (die ein Array ist) vom WP_QueryObjekt zurückgegeben.

Schleife mit get_posts

Bei Verwendung verwenden get_postswir nicht die übliche „WordPress-Schleife”, sondern verwenden eine normale PHP-Array-Schleife. Jedes Element im Array sind Post-Objekte, und es ist kein Zurücksetzen erforderlich, nachdem Sie mit der Schleife fertig sind. Denken Sie daran, dass Template-Tags (wie the_title(), the_permalink()usw.) innerhalb dieser Schleife nicht verfügbar sind. Sie müssen sich auf die Eigenschaften des Post-Objekts beziehen (z. B. $custom_post->ID).

Ich empfehle, dass Sie Ihre Post-Objekte anders als benennen $post. Es können Probleme auftreten, wenn Sie versuchen, auf Post-Eigenschaften zuzugreifen (es bezieht sich möglicherweise auf das globale Post-Objekt und nicht auf den Post in der Schleife).

Wenn Sie Vorlagen-Tags für einen einfacheren Zugriff auf Beitragsinformationen verwenden möchten (z. B. the_title()und the_permalink()), können Sie dies tun. Tun Sie dies, indem Sie WordPress anweisen, das globale Post-Objekt innerhalb der Schleife mit einzurichten setup_postdata(). Wenn Sie dies tun, müssen Sie den Status mit wp_reset_postdata()nach der Schleife zurücksetzen.

$custom_query = get_posts([/ Arguments here /]); foreach ($custom_query as $post) { setup_postdata($post); // Template tags are available here, for example: the_title(); } wp_reset_postdata();

Denken Sie daran, setup_postdatadass die Objekte, die Sie durchlaufen (der „ as“-Teil in der foreach-Schleife), benannt werden müssen $post! Im ersten Beispiel habe ich die Post-Objekte benannt $custom_postund das würde mit nicht funktionieren setup_postdata().

Wenn Sie jedoch nur Zugriff auf grundlegende Beitragsinformationen benötigen, können Sie das Einrichten des globalen Beitragsobjekts auch überspringen und stattdessen die entsprechenden „ get_“-Vorlagen-Tags und die Beitrags-ID verwenden. Beispielsweise the_permalink()funktioniert das Tag nur korrekt, wenn das globale Post-Objekt eingerichtet ist, aber Sie können den Post-Permalink ohne das globale Post-Objekt einfach mit anfordern echo get_the_permalink($custom_post->ID).

Argumente abfragen

Die vollständige Liste aller möglichen Argumente finden Sie auf der Dokumentationsseite von WP_Query. Beispiele für Parameter sind Beiträge mit bestimmten Begriffen aus einer Taxonomie, Beitragsmetawerte, Beitragstypen, Ein- oder Ausschluss bestimmter Beiträge und eine ganze Reihe von Optionen zum Sortieren der Ergebnisse. Es gibt zu viele, um sie im Detail durchzugehen, aber hier sind einige gängige Beispiele für Argumente zum Abfragen von Beiträgen.

Beispiel 1: Verwandte Beiträge aus derselben Kategorie

Angenommen, Sie möchten am Ende eines einzelnen Beitrags „verwandte Beiträge” anzeigen. Es sollte eine zufällige Auswahl von 3 Beiträgen anzeigen, die sich in derselben Kategorie wie der aktuelle Beitrag befinden, und der aktuelle Beitrag sollte aus dem Ergebnis ausgeschlossen werden.

Die Argumente sind ziemlich selbsterklärend. Ich frage nur nach ‘ post‘ in ‘ post_typeund maximal 3 Posts in ‘ posts_per_page'.

Zum Abfragen von Posts in Kategorien können Sie eine tax_query erstellen oder das einfachere ‘ category__in‘ verwenden (NB: funktioniert nur für die Post-Kategorie). Im obigen Beispiel verwende ich wp_get_post_categories(), um ein Array von Begriffs-IDs zu erhalten, die dem bereitgestellten Beitrag zugewiesen sind, und verwende dies für das Argument „ category__in“.

Sie können Beitrags-IDs mit „ post__not_in” ausschließen, während ich die aktuelle Beitrags-ID angegeben habe. Schließlich habe ich um eine zufällige Reihenfolge der Posts gebeten, indem ich ‘ rand‘ in ‘ orderby‘ gesetzt habe. Sie könnten zB ‘ title‘ oder ‘ date‘ angeben, um sie anders anzuordnen. Werfen Sie einen Blick in die Dokumentation zur Bestellung, um zu sehen, was möglich ist.

Beispiel 2: Alle Beiträge eines benutzerdefinierten Beitragstyps mit mehreren Sortierargumenten

In diesem Beispiel gehen wir davon aus, dass Sie einen benutzerdefinierten Beitragstyp „ book” haben und in einer benutzerdefinierten Seitenvorlage alle veröffentlichten Bücher anzeigen möchten. Sie möchten die Beiträge in erster Linie nach menu_order (das Seitenattribut, es ist eine Zahl, die Sie pro Beitrag festlegen können) und zweitens nach dem Titel des Beitrags ordnen.

Auch hier sind die Argumente ziemlich selbsterklärend. Ich fordere den Beitragstyp ‘ book‘ als ‘ post_type‘ an. Wenn Sie ‘ posts_per_page‘ auf -1 setzen, werden alle (veröffentlichten Posts) abgerufen, es sei denn, Sie geben im post_statusArgument ‘ ‘ etwas anderes an. Schließlich stelle ich ein Array für ‘ orderby‘ bereit, um WordPress anzuweisen, die Beiträge primär nach Menüreihenfolge in aufsteigender Reihenfolge und zweitens nach Titel in absteigender Reihenfolge zu sortieren.

Beispiel 3: Beiträge mit benutzerdefinierten Metadaten

Angenommen, Sie haben einen benutzerdefinierten Beitragstyp „ book” und möchten alle Bücher abfragen, die entweder unveröffentlicht sind oder zwischen den Jahren 1990 und 2019 veröffentlicht wurden.

Das Erstellen einer Abfrage mithilfe von Post-Meta erfolgt am besten mit meta_query(für sehr einfache Meta-Argumente können Sie direkt meta_keyund verwenden). meta_valueDas meta_queryArgument ‘ ‘ erfordert ein Array, wobei jedes Argument ein Array ist. Sie können die Beziehung zwischen jedem Argument mit ‘ relation‘ steuern, das ich ORim obigen Beispiel auf ” gesetzt habe.

Ich gebe zwei Metadaten-Argumente für ‘ meta_query‘ an. Der erste vergleicht einfach den Metaschlüssel „ book_status” mit dem Text „ unpublished“, und wenn er gleich ist, wird er eingeschlossen. Im zweiten Argument sage ich WordPress, dass es jeden Wert im Metaschlüssel „ year_published” erhalten soll, der zwischen den Zahlen 1990 und 2019 liegt.

Fazit

Sie sollten nun ein grundlegendes Verständnis der beiden Methoden zum Abfragen von Beiträgen haben. Es gibt keinen großen Unterschied, da Sie dieselbe Abfrage mit beiden erstellen können, aber die Art und Weise der Handhabung der beiden ist unterschiedlich. Die drei bereitgestellten Beispiele für Abfrageargumente berühren nur die Oberfläche dessen, was Sie Abfragen erstellen können. Eine vollständige Übersicht mit vielen Beispielen finden Sie in der WP_Query-Dokumentation .

Wenn Sie neugierig sind, wie Sie die globale Abfrage ändern können, die WordPress durchführt, habe ich einen separaten Beitrag, der sich ausführlich damit befasst.

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