WordPress ist ein ideales CMS, um lebendige Websites zu gestalten und gerade die Blogfunktionalitäten erleichtern das regelmäßige Veröffentlichen von Inhalten. Nicht immer entspricht jedoch die Darstellung der Kategorieübersicht, den gewünschten Anforderungen. Manchmal soll die Sortierung der Beiträge nicht nach Datum erfolgen oder die Anzahl der Beiträge pro Übersichtsseite soll eine andere sein. Wie ihr die Ausgabe von Beiträgen in einer Kategorie in WordPress beeinflussen könnt, zeigen wir euch in diesem kurzen How-To.
Wenn ihr auf eurer Website eine Kategorie habt, die in ihrer Ausprägung unabhängig von den anderen Kategorien im Blog ausgegeben werden soll (z.B. Anzahl der Beiträge, Sortierung etc.), könnt ihr in WordPress die Ausgabe sehr einfach ändern. Dieses ermöglicht euch zum Beispiel, innerhalb einer einzigen WordPress Website sowohl einen „klassischen Blog“ als auch z.B. ein Lexikon mit alphabetischer Sortierung zu realisieren.
Ihr benötigt hierfür nur ein Theme, in dem die functions.php überarbeitet werden kann. Tipp: Falls ihr ein gekauftes Theme einsetzt, erstellt vorab ein Child-Theme. Sonst können bei Updates eure Änderungen wieder überschrieben werden!
Wollt ihr nun z.B., dass die Beiträge einer Kategorie alphabetisch sortiert werden oder dass bei einer Kategorie mehr Beiträge anzeigt werden, als in den anderen Kategorien, teilt ihr dies WordPress über die functions.php mit.
Folgender Code muss in die functions.php eingefügt werden:
(kategoriename_oder_ID muss durch den Namen der Kategorie oder durch die ID der Kategorie ersetzt werden)
/*
* Kategorie-Query anpassen
*/
function modify_query_for_categories( $query ) {
if ( $query->is_category('kategoriename_oder_ID') ) {
$query->set( 'orderby', 'title' ); // es soll nach dem Titel sortiert werden
$query->set( 'order', 'ASC' ); // die Sortierung soll alphabetisch sein
$query->set( 'posts_per_page', '25' ); // es sollen 25 Beiträge angezeigt werden
}
}
add_action( 'pre_get_posts', 'modify_query_for_categories' );
Die Funktion modify_query_for_categories()
wird ausgeführt, bevor die Beiträge im Loop ausgegeben werden. Hierfür sorgt das pre_get_posts
in der Funktion add_action()
.
Ihr könnt natürlich noch weitere Änderungen für eine Kategorie vornehmen oder eine andere Kategorie ebenfalls verändern. Hierfür wird im Bereich innerhalb der Funktion modify_query_for_categories()
die if-Abfrage kopiert und die Kategorie ersetzt.
Weitere Parameter, die verändert werden können, findet ihr auf den Dokumentationsseiten zu WordPress:
https://codex.wordpress.org/Template_Tags/get_posts
https://developer.wordpress.org/reference/functions/get_posts/
Hallo, bin per Zufall hier her gestolpert. Der Code funktioniert. Es muss jedoch in der letzten Zeile das letzte Hochkomma entfernt werden.
Viele Grüße
Hallo,
vielen Dank für den code! Er funktioniert prima um eine Kategorie zu beeinflussen.
Gibt es auch eine Möglichkeit die Beiträge auf der Startseite (hier werden Artikel aus allen Kategorien angezeigt) zufällig zu sortieren?
Viele Grüße
Sebastian
Habs hinbekommen:
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( ‚orderby‘, ‚rand‘ );
}
Super! 🙂
Hallo,
auch ich bin hier zufällig rein gestolpert.
Ja der Code funktioniert.
Aber doch nicht so wie ich ihn gerne haben möchte.
Ich will ganz einfach, dass er erste Artikel auch als erstes angezeigt wird und er letzte als letztes.
Also genau umgedreht wie es wordpress macht.
Was also muss ich dafür eingeben?
Danke schon mal für die Hilfe.
Das geht recht einfach:
Ersetze in obigem Beispiel die Zeile
$query->set( ‚orderby‘, ‚title‘ );
durch
$query->set( ‚orderby‘, ‚date‘ );
Dann wird nach Datum aufsteigend sortiert – die Sortierrichtung muss natürlich mit
$query->set( ‚order‘, ‚ASC‘ );
auf „aufsteigend gesetzt sein. 🙂
Bin schon geraume Zeit auf der Suche nach einer Lösung für ein ähnliches Problem. Ich will aber nicht einfach nur z.B. „x Posts pro Seite“ darstellen, sondern „x Posts im Ganzen“ (ohne dass ich die überzähligen in eine eigene Kategorie schieben muss, damit ich nimmer 25 Seiten in der Pagination habe). Alternativ ginge auch: „Zeige nur Posts aus den letzten 12 Monaten, ignoriere alle älteren“.
Danke!
Geht es auch, dass nur Posts einer Kategorie angezeigt werden?
Danke
Heinz Jürgen Höninger
Im obigen Beispiel wird ja via
if ( $query->is_category(‚kategoriename_oder_ID‘) ) { …
nur auf eine bestimmte Kategorie abgezielt. Wenn du den If-Teil nicht verwenden möchstest, kannst du auch die Query direkt eingrenzen mit:
$query->set( ‚category_name‘, ’name_der_kategorie‘ );
Viele Grüße
Sebastian
Hallo und vielen Dank für den Code.
Eine Frage habe ich trotzdem: Wie verhält es sich, wenn ich den Code für mehrere Kategorien nutzen möchte? Die Eingabe if ( $query->is_category(’42‘,’24‘) scheint hier nicht zu funktionieren.
Gibt es hier eine Lösung?
Viele Grüße,
Marcus
Hab es rausbekommen, trotzdem vielen Dank 🙂
Hallo Marcus
Suche ebenfalls eine Lösung für mehrere Kategorien.
Wie funktioniert deine Lösung, magst du deinen Code veröffentlichen?
Vielen Dank und Gruss
Daniel
Ist es auch möglich, nur die Überschriften bei der Kategorienausgabe anzuzeigen und nicht immer den gesamten Beitrag?
Hier wäre ein Weg, die Steuerung der Content-Ausgabe zu modifizieren und damit die Ausgabe des Beitragsinhalts zu unterbinden.
Als Standard sieht es ja so aus:
Um die Ausgabe der Headline ohne Content zu erzeugen:
Vielleicht ist in deinem Fall auch eine Lösung ganz ohne Programmierung ausreichend, indem du im jeweiligen Beitrag einfach ein „Read more“ ganz oben im Texteditor (WP-Backend) einfügst.