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.

Ultimate Category Excluder ermöglicht dir, schnell und einfach Kategorien von der Startseite, dem Newsfeed, der Archivseite oder den Suchergebnissen auszuschließen.

By Marios Alexandrou

(76)
Last Updated: 3 Wochen ago
50.000+ Active Installs
Compatible up to: 6.7

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