WordPress und Kategorien

Praxis & Tipps | Tipps & Tricks

Ich habe ein WordPress-Blog mit einem Theme, das eine Kategorie für einen internen Zweck (Auswahl der Artikel fürs Topteaser-Karussell) benötigt. Doch diese Kategorie soll bei den Lesern nicht auftauchen, da sie damit nichts anfangen können. Wie mache ich das?

Von sich aus hat WordPress keine Möglichkeit, die Anzeige von Kategorien auszublenden. Auch die Plug-ins zu diesem Thema sind nur in der Lage, Artikel mit bestimmten Kategorien komplett auszublenden.

Abhilfe schaffen ein paar Zeilen Code, die Sie in functions.php einbinden. Zum Erstellen der Kategorienliste zu einem Artikel nutzt WordPress die Funktion get_the_category(), die glücklicherweise eine Eingriffsmöglichkeit bietet, nämlich den Filter get_the_categories. Hier können Sie mit dem bei WordPress üblichen add_filter-Aufruf eingreifen. Folgende Zeilen löschen beispielsweise alle Kategorien, die mit einem Unterstrich beginnen:

add_filter('get_the_categories', 'hideCategories');
function hideCategories($categories) {
     if (is_admin()) return $categories;
     $resCategories = array();
     foreach ($categories as $category) {
          if (strncmp($category->name, "_", 1)==0) continue;
          $resCategories[] = $category;
     }
     return $resCategories;
}

Dann taucht die Wartungs-Kategorie immer noch im Kategorien-Widget auf, das Sie in Sidebars einbinden können. Auch hier sieht WordPress zum Glück einen Filter vor, nämlich widget_categories_args:

add_filter( 'widget_categories_args', 'widget_categories_args_filter',
10, 1 );
function widget_categories_args_filter( $cat_args ) {
     $exclude_hide = "";
     $categories = get_categories();
     foreach ($categories as $category) {
          if (strncmp($category->name, "_", 1)!=0) continue;
          if ($exclude_hide=="")
               $exclude_hide = $category->term_id;
          else
               $exclude_hide .= "," . $category->term_id;
     }
     if ($exclude_hide!="") {
          $exclude_set = $cat_args['exclude'];
          if( isset($exclude_set) && !empty($exclude_set))
               $exclude_hide .= "," . $exclude_set;
          $cat_args['exclude'] = $exclude_hide;
     }
     return $cat_args;
}

Nun können Sie das Theme beispielsweise so einstellen, dass das Karussell die Artikel der Kategorie „_top“ anzeigt – und Ihre Leser werden nirgends „_top“ sehen. Technisch bleibt die Kategorie allerdings voll funktionsfähig, der Link /category/_top liefert also eine Liste aller Artikel im Karussell. (jow)

Artikel kostenlos herunterladen

Anzeige