Posts by Taxonomy¶
Wozu¶
twtheme_posts_by_taxonomy() liefert eine Liste von Beitrags-IDs, die zuerst nach
dem Namen ihres Terms und dann innerhalb des Terms nach einem Beitragsfeld
sortiert ist. Genau das leistet WP_Query nicht: Nach einem Termnamen kann man
dort nicht sortieren.
Die Funktion holt die Beiträge über get_posts() und sortiert sie danach in PHP
mit usort().
Anwendung¶
$ids = twtheme_posts_by_taxonomy(
'category',
[
'post_type' => 'post',
'orderby' => 'date',
'order' => 'DESC',
],
[
'hide_empty' => true,
],
[
'order' => 'ASC',
'orderby' => 'title',
]
);
Parameter¶
| Parameter | Typ | Beschreibung |
|---|---|---|
$taxonomy |
string |
Taxonomie-Slug, etwa category, post_tag oder eine eigene. |
$args |
array |
WP_Query-Argumente. |
$term_args |
array |
Argumente für get_terms(), etwa hide_empty. |
$sort |
array |
Sortierung innerhalb eines Terms: order und orderby. |
Zwei Parameter sind entfallen
Bis TWtheme 3.2.29 nahm die Funktion zusätzlich $transient_name und
$transient_period für einen Zwischenspeicher. Der Cache war zu diesem
Zeitpunkt längst ohne Wirkung, der Name nur noch Pflicht ohne Zweck. Beide
Parameter sind entfernt.
Bestehende Aufrufe brauchst du deshalb nicht anzupassen: PHP verwirft überzählige Argumente stillschweigend. Ein Aufruf mit sechs Argumenten funktioniert also weiter — und tut jetzt sogar etwas, wenn er vorher wegen eines fehlenden Namens abgebrochen ist. Wer einen Zwischenspeicher braucht, legt ihn selbst um den Aufruf.
Sortierung¶
Zwei Stufen, in dieser Reihenfolge:
- Nach Termname — natürliche Sortierung ohne Rücksicht auf Groß- und
Kleinschreibung, Richtung über
$sort['order']. Beiträge in mehreren Terms werden nach ihrem ersten Term einsortiert. - Innerhalb des Terms — nach
$sort['orderby'].
Für die zweite Stufe sind nur Felder des Beitrags erlaubt:
orderby |
sortiert nach |
|---|---|
date, modified |
Zeitstempel |
ID, menu_order, parent, author |
Zahlenwert |
title, name |
Text, natürliche Sortierung |
Alles andere lässt die Reihenfolge unverändert.
Verhalten¶
fieldswird intern aufallgesetzt und lässt sich nicht überschreiben, ebensosuppress_filtersauffalse.- Ist
$args['orderby']einer dieser Werte, gibt die Funktionnullzurück:none,type,rand,comment_count,meta_value,meta_value_num,post__in. Der Grund ist die Sortierung in PHP — diese Ordnungen ließen sich danach nicht mehr nachbilden. - Enthält ein
meta_query-Wert ein|, wird er in zwei serialisierte Werte zerlegt. Das trifft Felder, die ihre Werte serialisiert ablegen. - Ohne
tax_queryin$argssetzt die Funktion selbst eine, die alle Terms der Taxonomie umfasst.
Rückgabe¶
| Rückgabe | Wann |
|---|---|
array mit Beitrags-IDs |
Erfolg |
null |
unerlaubtes orderby, unbekannte Taxonomie, keine Terms, keine Beiträge |
Da null ein regulärer Fall ist und nicht die Ausnahme, gehört ein is_array()
oder eine leere Prüfung vor die Schleife.
Typische Einsatzfälle¶
- Beiträge nach Kategorie gruppiert ausgeben, innerhalb der Gruppe alphabetisch
- Eine stabile Reihenfolge über mehrere Terms hinweg, die
WP_Querynicht liefert