WordPress: Beiträge einer Kategorie auf der Startseite ausschließen
Manchmal möchte man bestimmte Artikel in den letzten Blog Beiträgen nicht anzeigen lassen. In diesem Beitrag zeige ich, wie du wahlweise mit Plugin oder Code Schnipsel die Beiträge einer oder mehrerer Kategorien auf der Startseite ausschließen kannst.
Die Gründe dafür können vielfältig sein. Vielleicht sollen die letzten Kundenprojekte in einer Kategorie Portfolio vorgestellt werden, welche nur vom Menü erreichbar ist, deren Beiträge aber nicht in den News auftauchen soll. Das Gleiche ist auch für Testimonials oder andere Content Arten denkbar.
Gerade bei einfachen Seiten benötigt man dafür nicht immer ein vollwertiges Plugin mit zusätzlichen Custom Post Types, sondern ist mit den Standard Features des Core zufrieden.
Beiträge einer Kategorie mit WordPress Plugin im Blog ausblenden
Zum Verstecken von Beiträgen mithilfe eines Plugins empfehle ich Ultimate Category Excluder, welches in meinen Tests einwandfrei und wie beschrieben funktioniert hat. Es kann kostenlos im WordPress Plugin Verzeichnis heruntergeladen werden und ist auf über 30.000 Webseiten aktiv.
Nach Aktivierung des Plugins können die auszuschließenden Kategorien unter Einstellungen → Category Excluder konfiguriert werden.
Neben der Startseite bzw. Blog Index können die Beiträge einer Kategorie auch in RSS Feeds und von den Suchseiten ausgeschlossen werden. Mit der Option „Exclude from All Archives“ wird die Archiv-Seite der ganzen Kategorie versteckt, d.h. hier im Beispiel-Screenshot führt die URL /kategorie/slider/ auf eine 404 Fehlerseite.
Kategorien im Blog mit Code Schnipsel entfernen
Wer kein extra Plugin einsetzen möchte, kann auch mit einem kleinen Code Schnipsel bestimmte Kategorien vom WordPress Loop auf der Startseite ausschließen.
Für die Änderung des Main Query zum Ausschluss der Kategorien verwenden wir den pre_get_posts Filter Hook. Mit der if-Abfrage wird sichergestellt, dass die Beiträge nur auf der Startseite und im Standard Loop ausgeblendet werden.
function theme_slug_exclude_categories( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'cat', '-7,-132' );
}
}
add_action( 'pre_get_posts', 'theme_slug_exclude_categories' );
Mit dem Code Schnipsel werden alle Beiträge in den Kategorien mit den IDs 7 und 132 ausgeschlossen. Das Minus vor den IDs sorgt dabei für den Ausschluss (exclude) der Kategorien.
Die ID der Kategorien lässt sich ermitteln, in dem diese unter Beiträge → Kategorien bearbeitet werden. In der Browser URL kann die ID dann abgelesen werden:
/wp-admin/term.php?taxonomy=category&tag_ID=7
Der Parameter cat kann auch genutzt werden, um mit Angabe der ID ohne Minus nur die Beiträge dieser Kategorie (include) anzuzeigen. Falls der Blog also nur die Kategorie News zeigen soll, und die 85 anderen Kategorien nicht, kann dieser Code genutzt werden:
function theme_slug_include_category( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'cat', '13' );
}
}
add_action( 'pre_get_posts', 'theme_slug_include_category' );
Der Code lässt sich beliebig anpassen, um beispielsweise die Kategorien auch auf anderen Seiten auszublenden. Dieser Schnipsel entfernt alle Beiträge der Kategorie mit ID 5 sowohl von der Suche als auch vom Blog Index.
function theme_slug_exclude_categories( $query ) {
if ( ! is_admin() && $query->is_main_query() ) {
if ( $query->is_home() or $query->is_search() ) {
$query->set( 'cat', '-5' );
}
}
}
add_action( 'pre_get_posts', 'theme_slug_exclude_categories' );
Für den Einsatz der Code Snippets empfehle ich die Erstellung eines WordPress Child Themes.
Quelle der Snippets: WordPress Codex
Hallo Thomas,
dein Eintrag scheint genau das zu thematisieren, was ich suche.
Wo muss denn der Code eingefügt werden, dass es funktioniert?
Ich möchte sowohl auf der Startseite, als auch auf einer anderen Seite Posts filtern.
Ich freue mich über eine fixe Rückmeldung.
LG
Astrid
Hallo Astrid,
Die Funktionen können beispielsweise in der functions.php einen Child Themes eingefügt werden. Zur Erstellung eines Child Themes siehe auch https://themecoder.de/2016/09/03/ein-wordpress-child-theme-erstellen-schritt-fuer-schritt-anleitung/
Ansonsten können Code Snippets auch per Plugin eingefügt werden: https://themecoder.de/2017/02/02/wordpress-code-schnipsel-mit-plugin-hinzufuegen-und-verwalten/
Hier empfiehlt sich aber dann wahrscheinlich eher, gleich das Ultimate Category Excluder Plugin zu verwenden, anstatt eigene Code Snippets.
LG,
Thomas
Hey Thomas,
danke für deine schnelle Rückmeldung. Leider funktioniert es bei mir nicht (bento-theme).
Wenn ich »$query->is_main_query()« herauslösche funktioniert es, aber dann ist meine seiten-Navigation verschwunden.
Kann es sein, dass ich stattdessen einen anderen Begriff einsetzen muss? Wenn ja, wo könnte ich das finden?
Leider bin ich noch nicht so vertraut mit dem Programmieren, die Filterung der Kategorien muss jedoch auch auf einer anderen Seite stattfinden. 🙁
Wenn es ohne is_main_query() funktioniert, dann handelt es sich wahrscheinlich um einen Custom Query im Theme.
Hier hilft nur, den Theme Autor zu kontaktieren. Dieser kann darüber Aufschluss geben, ob und wie die Datenbankfrage des Themes angepasst werden kann.
LG,
Thomas
Danke für den Tipp: Habe das Plugin installiert und alles ging wie von selbst 🙂
Gerne, freut mich 🙂