Kategorie-Seiten alphabetisch sortieren

In einer Facebook-Gruppe wurde gefragt, wie man alle Beiträge auf einer Kategorieseite alphabetisch sortieren kann. In diesem Beitrag möchte ich darauf eingehen, wie man die Sortierung von Beiträgen auf Archiv-Seiten von Kategorien (und anderen) anpassen kann.

Sortierung von Beiträge auf allen Kategorie-Seiten

Selbst wenn ich nicht genau weiß, wieso die Person die Beiträge auf allen Kategorie-Seiten (und nicht etwa auf einer Archivseite eines anderen Post-Types) sortieren wollte, wäre das hier der passende Code dafür:

function aa_sort_all_archives( $query ) {
	// Only sort main query.
	if ( ! $query->is_main_query() ) {
		return;
	}
	// Only sort category archives.
	if ( ! is_category() ) {
		return;
	}

	$query->set( 'order', 'ASC' );
	$query->set( 'orderby', 'post_title' );
}

add_action( 'pre_get_posts', 'aa_sort_all_archives' );

Wann immer man die Query verändern möchte, sollte man eine Callback-Funktion zum pre_get_posts Hook verwenden. In dieser Callback-Funktion prüfen wir zuerst einmal, ob wir uns in der Haupt-Query befinden. Dann prüfen wir mit einer weiteren Bedingung nach für unseren Anwendungsfall. Ist diese Bedingung nicht erfüllt, verlassen wir die Funktion ebenfalls. Wenn alle Bedingungen erfüllt sind, dann passen wir die Query an. In Zeile 7 prüfen wir also, ob wir auf einer Kategorie-Seite sind. Wenn das der Fall ist, dann setzen wir die Sortierreihenfolge auf aufsteigend („ascending“) in Zeile 11 und das Feld, nach dem sortiert werden soll in Zeile 12 auf das post_title Feld. Das war’s!

Nur Beiträge in einer bestimmen Kategorie ordnen

Für manche Post-Types ist es wohl eher unwahrscheinlich, dass man die Posts nach für alle Kategorien sortieren möchte. Daher können wir auch den „slug“ (oder den Namen bzw. die ID) einer Kategorie an die is_category() Funktion übergeben. In diesem Beispiel habe ich eine spezielle Kategorie „alphabetical“ verwendet, um nur auf dieser Kategorieseite die Beiträge zu sortieren:

function aa_sort_alphabetical_archives( $query ) {
	// Only sort main query.
	if ( ! $query->is_main_query() ) {
		return;
	}
	// Only sort category archives.
	if ( ! is_category( 'alphabetical' ) ) {
		return;
	}

	$query->set( 'order', 'ASC' );
	$query->set( 'orderby', 'post_title' );
}

add_action( 'pre_get_posts', 'aa_sort_alphabetical_archives' );

In der gleichen Art und Weise lassen sich auch viele andere Archiv-Seiten unter Verwendung der „Conditional Tags“ überprüfen. Im CODEX findet ihr außerdem eine Seite über „Alphabetizing Posts„, darin wird aber die Verwendung einer sekundären Query gezeigt. Macht so etwas bitte niemals! Und lasst auch nicht alle Beiträge ausgeben! Macht also nichts von dem, was die Seite euch hier erzählt 😉

Fazit

Das Sortierung von Beiträgen (oder anderen Beitragstypen) kann auf einer Archiv-Seite am besten mit dem pre_get_posts Hook gelöst werden. Wenn ihr das erste Mal mit diesem Hook arbeitet, dann kann es passieren, dass es nicht gleich so funktioniert, wie ihr es gerne hättet, aber es lohnt sich wirklich sich mit dem Hook zu beschäftigen.

Ihr findet den Code zu diesem Beitrage auch als funktionierendes Plugin in einem GIST, wo ihr es euch auch als ZIP-Datei herunterladen und dann auf eurer Seite installieren könnt.

Veröffentlicht von

Bernhard ist fest angestellter Webentwickler, entwickelt in seiner Freizeit Plugin, schreibt in seinem Blog über WordPress und andere Themen, treibt sich gerne bei den WP Meetups in Berlin und Potsdam herum und läuft nach Feierabend den ein oder anderen Halbmarathon.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.