Ich suche nach einer Lösung, mit der ich Folgendes drucken kann:
Cat 1 Cat 2 Cat 3
Post 1 Post 1 Post 1
Post 2 Post 2 Post 2
Post 3 Post 3
Post 4
BEARBEITEN
Ich suche etwas, das nur eine Datenbankabfrage erfordert ! Wenn Sie also einen foreach
in Ihrem Code gefolgt von einem haben new WP_Query
, ist dies nicht das, wonach ich suche (ich plane, dies auf die Homepage meiner Website zu stellen).
categories
wp-query
Ben
quelle
quelle
Antworten:
EDIT REVISIT NO 2
Ich habe die Transient-API noch nie berührt , bis ich heute die Antwort von @MikeSchinkel in diesem Beitrag sah . Dies hat mich dazu inspiriert, diesen Beitrag noch einmal zu besuchen. Nach einigen Tests habe ich Folgendes gefunden:
Die Ausführungszeit verringerte sich von ~ 0,07 Sekunden auf ~ 0,002 Sekunden
Die Datenbankabfragezeit hat sich um etwa die Hälfte verkürzt
Mit dem Transienten werden nur 2-dB-Abfragen ausgeführt
Funktionsweise des Codes ( Ich werde nur Änderungen gegenüber dem ursprünglichen Code von REVISIT besprechen ):
SCHRITT 1
Wir müssen den Wert von
$q
in einem Transienten speichern. Dies ist der Wert, der die Kategorieliste mit Post-Titeln enthält.SCHRITT 2
Wir müssen zuerst prüfen, ob ein Transient existiert, und wenn keiner existiert, erstellen Sie den Transienten. Wenn der Transient vorhanden ist, rufen Sie seine Informationen ab
SCHRITT 3
Diese Informationen werden nun durch eine
foreach
Schleife geleitet, um die Liste mit Kategorienamen und Beitragstiteln zu drucken.SCHRITT 4
Derzeit wird der Transient alle zwölf Stunden aktualisiert. Dies kann so eingestellt werden, dass es Ihren Anforderungen entspricht. Der Transient muss jedoch jedes Mal gelöscht und neu erstellt werden, wenn sich der Status eines Posts ändert. Dies kann vom Entwurf bis zur Veröffentlichung sein, ein neuer Beitrag wird veröffentlicht oder ein Beitrag, der in den Papierkorb verschoben wird. Dazu müssen Sie verwenden,
delete_transient
welche verknüpft werden undtransition_post_status
welche bei jeder Änderung des Status eines Posts ausgelöst werdenHier ist der vollständige Code:
In Ihrer functions.php
In Ihrer Vorlage, in der Sie Ihre Liste anzeigen müssen
ÜBERARBEITEN
Ich habe kürzlich eine sehr leichte Lösung gefunden, die viel schneller ist als die anderen möglichen Lösungen. Auf meiner Testseite erhalte ich laut Query Monitor eine Gesamtgenerierungszeit von nur ~ 0,07 Sekunden und nur 6-dB-Abfragen, während die anderen Methoden mir eine Generierungszeit von ~ 0,35 Sekunden und 50 zusätzliche Datenbankabfragen geben.
Hier ist eine Aufschlüsselung meiner Methode
SCHRITT 1
Sie müssen zuerst eine benutzerdefinierte Abfrage mit erstellen
WP_Query
, um alle veröffentlichten Beiträge abzurufenSchritt 2
Rufen Sie
get_the_category
mit eine Liste aller Kategorien ab, zu denen ein Beitrag gehört.SCHRITT 3
Weisen Sie dem Beitragstitel und den Kategorien des Beitrags Variablen zu
und
SCHRITT 4
Kombinieren Sie diese beiden Variablen zu einem mehrdimensionalen Array
Um zu sehen, was im Array passiert, führen Sie einfach a aus
var_dump
SCHRITT 5
foreach
Erstellen Sie mithilfe von Schleifen Ihre Beitragsliste sortiert nach KategorienJETZT ALLE ZUSAMMEN!
Hier ist der vollständige Code
quelle
Ich wollte nur meine Lösung hinzufügen, die sich aus meiner Frage ergab. Dadurch wird die Abfrage für die Kategorien zwischengespeichert und auch die Beiträge, einschließlich des Beitragsinhalts, in jeder Kategorie zwischengespeichert. Wenn der Cache zum ersten Mal gefüllt wird, gibt es normale Datenbankabfragen. Sobald sie jedoch gefüllt sind, werden die zwischengespeicherten Kategorien und Beiträge bereitgestellt, sodass keine Datenbankabfragen mehr erforderlich sind.
quelle
Versuchen Sie jetzt diesen Code
quelle
Hier ist meine Lösung, um die Kategorien und Beiträge innerhalb dieser Kategorien als ein Ergebnis zu erhalten.
Mein Beispiel basiert auf der Taxonomiekategorie für benutzerdefinierte Beitragstypen
document_category
und dem benutzerdefinierten Beitragstypdocuments
. Aber ich bin sicher, Sie werden auf die Idee kommen.quelle
Ich habe etwas für mich erstellt, das ich ziemlich oft benutze. Hier ist der Code. Sie können Slugs, IDs oder den Begriff Objekt im
$categories
Array verwenden, wenn Sie alle Kategorien erhalten möchten, die Sie verwenden könnenget_terms()
, und mit einer Reihe von füttern möchten Begriff Objekte, aber seien Sie vorsichtig, es gibt keine Behandlung für Hierarchie in diesem Code.quelle
Ungetestet, aber einer der einfachsten Ansätze, die ich versuchen würde, ist der folgende:
quelle
get_all_category_ids();
die jetzt abgeschrieben wirdSie können dies verwenden ... Legen Sie die Anzahl der Beiträge fest, die Sie benötigen ...
Außerdem habe ich alles in ein Div gesteckt, damit Sie die Struktur und das Design, nach denen Sie suchen, gestalten können.
Hoffe das hilft.
quelle
order_by = cat
im Kodex gefunden)!Wenn Sie nach einem Plugin suchen, funktioniert List Category Posts möglicherweise für Sie.
Schauen Sie sich für eine Anfrage an
get_posts
quelle