Nein, es ist nicht möglich, nach Taxonomie zu ordnen, da dies unter bestimmten Gesichtspunkten eigentlich keinen Sinn ergibt.
Taxonomien sind Möglichkeiten, Dinge zu gruppieren. Der Sinn einer Taxonomie für Stellen wäre es also, Begriffe in dieser Taxonomie zu haben, die zwischen Stellen geteilt werden. Wenn eine Taxonomie Begriffe hätte, die jeweils nur für einen Beitrag verwendet wurden, würde dies die Taxonomie sinnlos machen. Und wenn die Begriffe so geteilt würden, wie sie sollten, würde eine Bestellung danach nichts besonders Nützliches ergeben.
Was Sie in einer solchen Situation verwenden sollten, ist das Post-Meta. Sie können per Post-Meta bestellen, und es ist für jeden Post einzigartig.
Bearbeiten: Das heißt, Sie können nach Taxonomie ordnen, indem Sie eine benutzerdefinierte SQL-Abfrage mit einem Filter erstellen. Dies ist in einer nicht geänderten WP_Query nicht möglich: http://scribu.net/wordpress/sortable-taxonomy-columns.html
Wenn Sie jedoch auf diese Art zurückgreifen müssen, ist Ihre Datenentwurfsstruktur in erster Linie falsch. "Begriffe" in der Taxonomie sind keine tatsächlichen "Daten". Die Begriffe selbst haben keine inhärente Bedeutung, sie sind nur Bezeichnungen für die bestimmte Gruppierung, die sie beschreiben. Wenn Sie sie als aussagekräftige Daten behandeln, liegt Ihnen ein Konstruktionsfehler zugrunde.
Taxonomien gruppieren Dinge, indem sie ihnen Begriffe zuweisen. Diese Gruppierung ist der springende Punkt bei Taxonomien. Die Begriffe sind nur hübsche Gesichter in der Gruppierung. Wenn Sie aussagekräftige Metadaten haben, die Sie einem Beitrag zuordnen können, sollten Sie stattdessen das Beitrags-Meta verwenden. Und dass Sie kann durch, bestellen , weil Post Meta beiden Schlüssel und Werte zu speichern Informationen verwendet. Mit einer Taxonomie speichern Sie wirklich nur Schlüssel, deren Werte die nach diesem Begriff gruppierten Beiträge sind.
Auf lange Sicht sind die Dinge einfacher, wenn Sie den richtigen Ansatz dafür verwenden. Ich sage zwar nicht, dass Sie mit Taxonomie nichts Seltsames anfangen können, aber Sie erschweren sich die Dinge auf lange Sicht, indem Sie sie falsch verwenden.
Die akzeptierte Antwort auf diese Frage ist nicht akzeptabel. Es ist unlogisch anzunehmen, dass eine Bestellung nach Steuern "keinen Sinn ergibt". Die Antwort, die er gab, ergibt keinen Sinn.
Erwägen Sie, einen Menüpfostentyp zu haben. Dann haben Sie eine benutzerdefinierte Steuer von "FoodCategories". Die FoodCategories-Steuer beinhaltet die Begriffe "Frühstück", "Mittagessen" und "Abendessen". Wenn Sie eine Abfrage mit dem Parameter tax_query senden, wird jetzt eine Ergebnismenge mit allen Begriffen angezeigt, die jedoch nach dem Postdatum sortiert sind.
Um die richtige Reihenfolge dieser Einträge im Verhältnis zu ihren Begriffen zu ermitteln und sie dann am Frontend entsprechend anzuzeigen, indem Sie die Beiträge in ihre verschiedenen Kategorien unterteilen, müssen Sie die Ergebnismenge durchlaufen und dann jeden einzelnen Beitrag im abfragen Ergebnismenge, um die Begriffe zu finden und mit dem aktuellen Begriff zu vergleichen, in ein Array zu filtern und fortzufahren. Anschließend müssen Sie das neue Array erneut durchlaufen, um es anzuzeigen. Das ist nicht produktiv.
Es wäre schön, wenn WP eine "tax__in" orderby-Option hätte, wie es eine "post__in" -Option hat, aber da dies nicht der Fall ist, müssen Sie entweder den oben genannten lächerlichen Prozess ausführen; Passen Sie die Abfrage mithilfe der Filter "posts_orderby" und "posts_join" an, um die orderby-Methode anzupassen und den Begriff der Ergebnismenge hinzuzufügen. Oder Sie müssen eine neue Abfrage für jeden Begriff erstellen, nach dem Sie in den HTML-Abschnitten im Verhältnis zu diesen Begriffen filtern.
Am effizientesten wäre es, die Abfragezeichenfolge über Filter zu ändern. Am einfachsten wäre es, drei separate Abfragen durchzuführen. Die WP-API sollte die Bestellung nach Steuern oder restriktiven Abfrageparametern verarbeiten. Wenn Sie eine Abfrage basierend auf bestimmten Bedingungen einschränken, besteht eine hohe Wahrscheinlichkeit, dass viele nach denselben Bedingungen bestellen müssen.
quelle
Ja, aber es ist ziemlich verwickelt ...
Füge zu functions.php in deinem Theme hinzu:
Dies ist frankensteined von einigen gefundenen Sachen und einige Sachen, die ich selbst gemacht habe. Das zu erklären ist ziemlich schwierig, aber das Fazit ist, dass dies läuft. Sie können? Orderby = (Taxonomie-Abfrage var) & order = ASC (oder DESC) setzen und sie wird gleich abheben!
quelle
add_filter('posts_clauses', 'orderby_tax_clauses', 10, 2 );
umadd_filter('posts_clauses', 'todo_tax_clauses', 10, 2 );
Danke :)Ich komme hier zu spät zum Spiel, aber es gibt eine einfachere Möglichkeit, dies mit WordPressy zu tun.
Erstellen Sie Ihre Steuerabfrage wie gewohnt.
Richten Sie Ihre Argumente für query_posts oder WP_Query ein
Bevor Sie den Aufruf von query_posts / WP_Query ausführen, schließen Sie sich dem orderby-Filter an und überschreiben Sie ihn
Vergessen Sie nicht, den Filter danach zu entfernen ...
Dies funktioniert b / c die tax_query erstellt die Joins usw. für Sie, Sie müssen nur durch eines der Felder aus dem Join bestellen.
quelle
Nun, ich möchte meine Erfahrung in der Sortierung von benutzerdefinierten Beitragstypen nach Kategorie / Taxonomie offenlegen.
DAS NETZ
DER FALL
Auf Seiten mit Archivkategorielisten wollte der Kunde, dass die Beiträge nach sortiert werden
DIE SCHRITTE
Zuerst fange ich die Anfrage von der unmodifizierten Archivseitenanfrage ab, die zufällig so aussah:
Zweitens habe ich den SQL-Code in Sequel Pro für die Datenbank bearbeitet, um meinen Anforderungen zu entsprechen. Ich komme mit diesem heraus (ja, wahrscheinlich kann es verbessert werden: mein Wissen über MySQL ist nicht hervorragend):
Drittens habe ich die Abfrage in der Datei functions.php mit drei Filtern verknüpft: posts_fields, posts_join und posts_orderby
Der Code in functions.php:
Schließlich habe ich die Filter aus dem pre_get_post-Hook unter bestimmten Bedingungen ausgelöst
Hoffe das kann jemandem helfen
quelle
Ich hatte ein sehr ähnliches Problem: Ich möchte ein benutzerdefiniertes Post-Type-Archiv (Zeitschriftenartikel) nach einer benutzerdefinierten Taxonomie (Ausgaben) bestellen. Ich führe niemals direkte SQL-Abfragen auf meiner Site durch - und normalerweise müssen Sie Ihren Ansatz überdenken, wenn Sie wie diese anderen Antworten sind.
PROBLEME:
1) Mit Wordpress können Sie Taxonomien nicht auf intelligente Weise bestellen.
2) Wordpress erlaubt es einfach nicht,
orderby
Taxonomien für WP_Query nach dem Typ (wie von Otto dargelegt) zu verwenden.LÖSUNGEN:
1) Das Sortieren von Taxonomien wird derzeit am besten mit dem Plug-in "Custom Taxonomy Order NE" durchgeführt . Es ermöglicht Ihnen, die Taxonomie über WYSIWYG zu bestellen, in
wp-admin
dem nicht wie ich es tun würde, aber ich habe nichts Besseres gefunden.Wenn Sie das Plugin einrichten, erhalten Sie etwas Ähnliches wie hier. Notieren Sie sich die Option
Auto-sort Queries of this Taxonomy
- setzen Sie diese aufCustom Order as Defined Above
; Dadurch erhalten Sie die Bestellung, die Sie benötigen. Bildschirmfoto:2) Mit einer sortierten Taxonomie können Sie jetzt eine Reihe von WP_Query-Aufrufen erstellen, die sich über jeden Begriff erstrecken. Auf diese Weise wird ein Archiv erstellt, das nach Taxonomie geordnet ist. Verwenden Sie
get_terms()
diese Option , um ein Array aller Steuerbedingungen zu erstellen, und führen Sieforeach
dann für jede Bedingung eine neue aus . Dadurch wirdWP_Query
für jeden Begriff ein Element erstellt, das alle Beiträge für einen bestimmten Begriff zurückgibt, wodurch effektiv ein Archiv erstellt wird, das nach Taxonomiebegriff geordnet ist. Code, um dies zu ermöglichen:Verwandte Lektüre auf dieser Website: Alle Posts in einem benutzerdefinierten Post-Typ anzeigen, gruppiert nach einer benutzerdefinierten Taxonomie
quelle
Ich bin nicht sicher, warum alle Lösungen hier ziemlich übertrieben sind. OK, es ist ein halbes Jahrzehnt her, aber ich führe gerade den folgenden Code aus und es funktioniert:
Dies sortiert die Taxonomien Ihres CPT zuerst nach ihrer Taxonomie in alphabetischer Reihenfolge und innerhalb dieser Taxonomiegruppen auch nach alphabetischer Reihenfolge.
quelle
Hier ist die Lösung, die ich für dieses spezielle Problem verwendet habe. Diese Lösung ist für extreme Fälle gedacht, in denen sowohl kein
pre_get_posts
Filter verwendet werden kann als auch die Abfrage eine Paginierung aufweist (z. B .: WooCommerce):Ich habe dies verwendet, um ein Navigationsmenü zu erstellen, das nach Taxonomie, Begriff und Anzahl der Beiträge pro Begriff geordnet ist.
Wenn Sie einfach die Beiträge möchten, ändern Sie die Abfrage auf
SELECT p.*
undGROUP BY p.ID
quelle
Es ist wie eine Abfrage vor der Abfrage, aber es stört nicht, wenn nicht zu viele Beiträge abgefragt werden. Die Idee ist, die Hauptabfrage zu ändern, sodass wir nicht einmal zu Vorlagen wechseln und neue Abfragen generieren müssen Schleifen ...
quelle