dynamicinternet Webdesign

Das Blog

Themen, Tutorials sowie Tipps & Tricks über Webdesign, (X)HTML und CSS, Programmierung, WordPress und was uns sonst noch bewegt.

RSS abonnieren

Bestimmte Kategorien ausschließen in WordPress

Manchmal ist es erforderlich, bestimmte Kategorien bzw. deren Posts von der Anzeige im Blog auszuschließen. Dafür stellt WordPress ein Conditional Tag bereit, in_category(). Ein entsprechender Aufruf im Loop würde dann zum Beispiel so aussehen:


if(have_posts()) : while(have_posts()) : the_post() ;
  if(!in_category(3) && !in_category(5)):
//euer HTML Code
  endif;
endwhile; endif;

In diesem Fall würden Posts aus den Kategorien mit der ID 3 und 5 nicht angezeigt (achte auf die Negierung).
Das alleine wäre sicherlich keinen Beitrag wert und dürfte jedem geläufig sein, der ein bischen mit WordPress herumspielt.
Nun ist es aber meistens so, das die Anforderung, bestimmte Kategorieposts auszuschließen, nicht nur auf einer Seite auftritt, sondern in mehreren Themedateien. index.php, archive.php, category.php, search.php und möglicherweise noch mehr. Sollte sich etwas an den Kategorien ändern, sei es, wir haben das Theme lokal entwickelt und der Kunde hat später andere Kategorie ID’s, haben wir das Problem, bei all diesen Dateien die ID’s zu ändern. Das nervt. Aber es geht auch einfacher. Wir schreiben in der functions.php eine Funktion:


function hideMyCategories() {
  if(!in_category(3) && !in_category(5)) {
    return true;
  } else {
    return false;
}

In die Template-Dateien kommt dann nur hinter den Loop:


if(true === hideMyCategories()):
//HTML Code
endif;

Somit brauchen wir nur einmal die Kategorie-ID’s in der functions.php ändern.

7 Kommentare
  1. Frank sagt:

    … oder sogar noch ein Optionsfeld im Backend einbauen, so dass der Kunde das selber ohne Eingriff in den Code erledigen kann. Eventuell könnte man dann die IDs via Options aus der DB direkt im Loop abfragen, braucht also die extra Funktion nicht.
    Alternativ kann man einen eigenen Query bauen und auch dort IDs excluden.

  2. Micha sagt:

    Gute Idee, aber das war mir bei diesem speziellen Projekt doch ein wenig aufwendig.

  3. Jeriko sagt:

    Damit einher kommt aber wieder das Problem, dass man die Anzahl der angezeigten Beiträge im Vorfeld nicht vorraus sagen kann, bis hin zum Extremfall, das einfach gar nichts angezeigt wird, dann nämlich, wenn alle Beiträge in der Kategorie 3 oder 5 sind.

    Meine Lösung sieht seit langem so aus:

    function exclude_category() {
    global $wp_query;

    if(is_home()) : // wahlweise andere Conditional Tags
    $wp_query->set('category__not_in',array(3,5));
    endif;
    }

    Kann ebenfalls in die functions.php, sonstige Theme-Dateien müssen nicht verändert werden, Anzahl der angezeigten Beiträge bleibt immer gleich und es wird kein zusätzliches Query erzeugt.

  4. Jeriko sagt:

    Hrmz, und natürlich am Ende noch ein

    add_action('pre_get_posts','exclude_category');

    ;-)

  5. Micha sagt:

    @Jeriko: Danke für den Tipp. In meinem Fall ist das Wurscht mit den Posts, die brauch ich nur als Hilfsmittel. Ich werd darüber auch noch ein Beitrag schreiben.

  6. Frank sagt:

    @Jeriko: so meinte ich das, nur dass eben die Werte im Array aus einem Optionsfeld kommen.

  7. Benedikt sagt:

    Vielen, vielen Dank Jeriko!!

    und auch an Micha für die Seite überhaupt

    Gruß,
    Benedikt

Einen Kommentar schreiben