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

WordPress-Theme-Tutorial für Anfänger – Teil 12: Benutzerdefinierte Post-Abfrage

18

In dieser letzten Lektion lernen wir, wie Sie Ihre eigene Abfrage von Beiträgen schreiben und sie durchlaufen, ohne die übergeordnete Schleife in der Vorlage zu unterbrechen. Wir erstellen einen Vorlagenteil für einzelne Posts, der verwandte Posts in derselben Kategorie anzeigt.

Was wir in dieser Lektion machen werden, ist eine Abfrage verwandter Beiträge in unserer Einzelbeitragsansicht, die maximal 3 Beiträge des Beitragstyps Beitrag in derselben Kategorie oder denselben Kategorien wie der Beitrag, in dem wir uns gerade befinden, anzeigt, den aktuellen Beitrag selbst ausschließt, und randomisieren Sie die angezeigten Beiträge. Wir werden auch Strategien untersuchen, um die verschachtelte Schleife nicht zu vermasseln.

Vorlage für verwandte Beiträge

Lassen Sie uns die verwandten Posts zu einem Vorlagenteil machen, über den wir in Teil 10 gelernt haben. Auf diese Weise machen wir es nicht zu kompliziert single.phpund machen unseren Code besser wiederverwendbar. Platzieren Sie die Anforderung dieses neuen Vorlagenteils, wo immer Sie möchten. Ich platziere es direkt vor dem Anfordern der Kommentarvorlage:

Jetzt erstellen wir eine neue leere Datei in unserem Themenordner und nennen sie related-posts.php. Mit dieser Datei können wir in die Erstellung einer benutzerdefinierten Post-Abfrage eintauchen.

Benutzerdefinierte Post-Abfrage

Wenn Sie eine benutzerdefinierte Abfrage von Beiträgen vornehmen möchten, haben Sie einige Optionen, aber ich empfehle, sich an die Klasse zu gewöhnen WP_Query. Legen Sie ein Lesezeichen für diese Dokumentationsseite an, da Sie häufig darauf zurückgreifen werden, da es so viele Optionen gibt. Ich zeige Ihnen ein praktisches Beispiel für die Einrichtung einer Abfrage, indem ich auf die Dokumentation für jede Spezifikation verweise, die wir hinzufügen möchten.

Wenn Sie mehr darüber erfahren möchten, wie Sie Beiträge abfragen, habe ich einen Beitrag, der genau darauf eingeht.

Um eine benutzerdefinierte Post-Abfrage zu erstellen, rufen wir auf new WP_Query(), übergeben ein Array von Argumenten und speichern das Ergebnis in einer Variablen. Und dann verwenden wir genau dieselbe Schleife, die wir zuvor in unseren Vorlagen verwendet haben (werfen Sie zum Vergleich einen Blick auf die ursprüngliche Schleife hier ). Aber wir müssen der Schleife sagen, dass sie die Variable durchgehen soll, anstatt die globale (die der einzelne Post ist).

So sieht die Schleife aus, wenn sie zu einer benutzerdefinierten Abfrage hinzugefügt wird:

have_postsWie Sie sehen können, ist die Schleife mit und genau dieselbe the_post. Der Unterschied besteht darin, dass wir sie auf das $related_postsObjekt aufrufen. Wenn wir den $related_postsTeil überspringen, geht WordPress automatisch davon aus, dass es sich um die globale Abfrage von Beiträgen handelt.

Möglicherweise bemerken Sie auch den Funktionsaufruf wp_reset_postdata()direkt nach der Schleife. So „räumen wir nach uns selbst auf” nach einer benutzerdefinierten Abfrage mit WP_Query. Denken Sie daran, dass the_post()das globale Post-Objekt so eingerichtet wird, dass wir the_title()etc. verwenden können. Und da wir uns bereits in einer Schleife befinden (die in single.php), müssen wir sicherstellen wir bereinigen und setzen den Post wieder auf den einzelnen Post zurück, nachdem wir fertig sind. Wenn wir postdata nicht zurücksetzen, bezieht sich alles danach auf den letzten verwandten Post, den wir durchgegangen sind. Dies kann ein großes Problem sein! In unserem Beispiel wir haben Sie eine Kommentarvorlage, die darauf folgt. Wenn Sie das Zurücksetzen weglassen, zeigt die Kommentarvorlage Kommentare aus dem letzten verwandten Beitrag in der Schleife. Und nicht den einzelnen Beitrag, den wir gerade betrachten!

Implementieren unserer benutzerdefinierten Schleife

In Ordnung, beginnen wir mit der Implementierung der benutzerdefinierten Schleife in unserer related-posts.php. Ich habe einen Wrapper und einen Titel hinzugefügt, aber wie üblich können Sie den HTML-Code nach Belieben anpassen:

Jetzt sehen wir die Leistungsfähigkeit der Wiederverwendbarkeit in Vorlagenteilen. Nehmen wir an, dass wir in dieser benutzerdefinierten Schleife genau denselben Inhalt anzeigen möchten wie in unserer content-loop.php, die wir in unseren Archivvorlagen verwenden. Alles, was wir tun müssen, ist, diesen Vorlagenteil innerhalb unserer benutzerdefinierten Schleife anzufordern, sind wir bereit, die Ausgabe jedes Posts zu handhaben!

Jetzt müssen wir nur noch die Argumente zu unserer Post-Abfrage hinzufügen, um sicherzustellen, dass wir das abrufen, was wir wollen. Gehen wir die Argumente nacheinander durch.

Erstellen der Argumente für unsere benutzerdefinierte Post-Abfrage

Wir wollen nicht mehr Posts als 3 abrufen. In der Dokumentation (Abschnitt „Paginierungsparameter”) ist das Argument dafür posts_per_page. Also fügen wir das Array-Element hinzu:

Wir möchten sicherstellen, dass WordPress Beiträge abruft und keine Seiten oder etwas anderes. In „Post-Typ-Parameter” finden wir:

Wir möchten verhindern, dass der einzelne Beitrag, in dem wir uns gerade befinden, in unserer Abfrage nach verwandten Beiträgen angezeigt wird, da dies keinen Sinn ergibt, oder? Die Dokumentation sagt uns in „Post & Page parameters”, dass wir die Post-ID in einem Array für hinzufügen können post__not_in:

Wir möchten die Posts auch randomisieren; weil standardmäßig die neuesten veröffentlichten Posts abgerufen werden, und das kann sich schnell ziemlich wiederholen, wenn Sie Posts durchgehen. Glücklicherweise hat WordPress dafür eine Funktion, wie es die Posts ordnet; in „Ordnen und Sortieren nach Parametern” finden wir:

Schließlich wollen wir Posts abfragen, die sich in denselben Kategorien befinden wie der Post, bei dem wir gerade sind. Dazu müssen wir zuerst, vor den Abfrageargumenten, die Kategorien zu dem einzelnen Beitrag bringen, an dem wir uns befinden. In „Kategorieparameter” sehen wir, dass wir ein Array von Kategorie-IDs für bereitstellen können category__in. Glücklicherweise hat WordPress eine Funktion zum Abrufen von Kategorie-IDs für einen Beitrag; wp_get_post_categories()die wir direkt als Wert für den Parameter verwenden können. Perfekt!

Hier ist die letzte Abfrage und ihre Argumente:

Aktualisieren Sie und Sie sollten 3 Beiträge unten in der Einzelansicht aufgelistet sehen. Aktualisieren Sie mehrmals, um zu sehen, dass sie sich ändern, weil wir WordPress angewiesen haben, sie zu randomisieren. Hinweis: Wenn Sie weniger als 3 Beiträge in derselben Kategorie haben, erhalten Sie weniger als 3 Beiträge.

Das ist es! Jetzt wissen Sie, wie Sie beliebige Beiträge abfragen können. Die WP_Query-Dokumentationsseite ist äußerst hilfreich beim Optimieren Ihrer Abfrage, da hier wirklich unbegrenzte Möglichkeiten bestehen. Ich ermutige Sie, mit den Parametern herumzuspielen und vielleicht zu versuchen, einen separaten Vorlagenteil zu erstellen, der für verwandte Posts verwendet werden kann.

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