Bestimmte WordPress Kategorien verstecken, Beiträge in multiplen Kategorien dennoch anzeigen.

In diesem Beitrag geht es darum, wie Du bestimmte WordPress Kategorien auf der Startseite verstecken jedoch Beiträge mit multiplen Kategorien trotzdem anzeigen kannst.

Folgendes Problem: Du möchtest Beiträge einer bestimmten WordPress Kategorie von der Startseite des Blogs verbannen. Du möchtest aber die Beiträge, die zusätzlich noch in einer anderen Kategorie enthalten sind trotzdem angezeigt lassen.

Konkretes Beispiel: Kategorie A soll auf der Startseite des Blogs nicht angezeigt werden. Beiträge, die aber in mehr als nur in Kategorie A enthalten sind, sollen trotzdem angezeigt werden.

wordpress-kategorie-ausblenden

Für das erstere der beiden Teilprobleme kannst Du ganz einfach eine von WordPress bereitgestellt Funktion in_category() nutzen. Damit kannst Du Kategorie A einfach von der Startseite verstecken.

Die Loop sehe dafür so aus:

//Kategorien, die nicht angezeigt werden sollen
$myCatsToExcludeArray = array(5,10);
while (have_posts()) : the_post();
  //Wenn Beitrag in Kategorie 5 oder 10, dann überspringe ihn 
  if(in_category($myCatsToExcludeArray)) continue;
  ...
  ... // hier steht das übliche einer WordPress Loop
  ...
endwhile;

Jonathan Torke hat hier noch eine elegantere Lösung über die functions.php, so dass man nichts im Template selbst verändern muss.

Wenn Du damit eine Kategorie ausschließt, schließt Du aber auch alle Beiträge aus, die in dieser Kategorie und zusätzlich in anderen Kategorien enthalten sind.

Die if Abfrage muss also soweit erweitert werden, dass sie zusätzlich nachschaut, ob der Beitrag nur in einer oder noch in mehreren Kategorien enthalten ist. Wenn er nur in einer Kategorie enthalten ist und diese Kategorie in der exclude Liste ist, dann — und nur dann — soll der Beitrag übersprungen werden. Das geht dann mit count(get_the_category($post->ID)) == 1

Die Loop sehe dafür dann so aus:

//Kategorien, die nicht angezeigt werden sollen
$myCatsToExcludeArray = array(5,10);
while (have_posts()) : the_post();
  //Wenn Beitrag in Kategorie 5 oder 10 und nur in einer einzigen Kategorie, dann überspringe ihn 
  if(in_category($myCatsToExcludeArray) && count(get_the_category($post->ID)) == 1) continue;
  ...
  ... // hier steht das übliche einer WordPress Loop
  ...
endwhile;

Voila, fertig. An dieser Stelle möchte ich Torben Leuschner und Christopher Ross für die Hilfe auf Google+ und wordpress.stackexchange.com sehr sehr danken! Vorher habe ich sehr lange nach einer Zählmethode der Kategorien eines Beitrages gesucht.

2 Kommentare » Schreibe einen Kommentar

  1. Moin moin und Vielen Dank!
    Nur was genau muss ich jetzt eintragen, wenn ich das in der functions.php ändern will?

    Wenn ich das hier nehme, geht gar nix mehr:

    function exclude_category_home( $query ) {
    if ( $query->is_home ) && count(get_the_category($post->ID)) == 1) {
    $query->set( ‚cat‘, ‚-5, -34‘ );
    }
    return $query;
    }

    add_filter( ‚pre_get_posts‘, ‚exclude_category_home‘ );

  2. Wende Dich mit der Frage an eine functions.php Lösung bitte an Jonathan (verlinkt im Beitrag). Die Lösung in der functions.php habe ich nicht getestet.

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.