WordPress

Aktuelle Kategorie in der Post-Einzelansicht hervorheben

von Simon [webdemar] - 9 Kommentare

Mit der WordPress-Funktion wp_list_categories() kann die aktuelle Kategorie mit der CSS-Klasse current-cat im Menü hervorgehoben werden. Das gilt jedoch nur für Kategorieübersichten. Aber auch in der Einzelansicht macht das Sinn.

Ausgabe einer Liste der Kategorien

Wenn wir in unserem WordPress-Theme eine Liste der Kategorien ausgeben wollen, machen wir das ähnlich dem folgenden Beispiel mit der WordPress-Funktion wp_list_categories().

<ul id='cat-menu'>
    <?php wp_list_categories('title_li='); ?>
</ul>

Bemerkung:
Automatisch wird dabei der Listenpunkt der aktuellen Kategorie mit der Klasse current-cat belegt, die wir beliebig im Stylesheet verarbeiten können (z. B. anderer Hintergrund). Dies geschiet aber, wie gesagt, nur in der Kategorieübersicht.

Hervorheben einer bestimmten Kategorie erzwingen

Für manche ist es sinnvoll, darüberhinaus die aktuelle Kategorie zu markieren, wenn man sich in der Einzelanischt eines Posts befindet. Das steigert die Orientierung der User.

Die WordPress-Funktion wp_list_categories() brint von Haus aus den Parameter current_category mit. Wenn man der Funktion mit diesem Parameter bspw. die Kategorie-ID 5 mitgibt, kann man erzwingen, dass die Kategorie 5 die Klasse current-cat erhält.

<ul id='cat-menu'>
    <?php wp_list_categories('title_li=&current_category=5'); ?>
</ul>

Abfrage der Kategorie(n) in der Einzelansicht

Um diese Anwendung dynamisch in der Einzelansicht eines Posts zu verwenden, fragen wir mithilfe der Funktion get_the_category() die Kategorie des jeweiligen Posts ab und speichern uns diese in einer Variable.

<?php
$category = get_the_category();
$currentcat = $category[0]->cat_ID;
?>

Bemerkung:
Hier speichern wir alle Kategorien, in die der aktuelle Post eingeordnet ist, mit get_the_category() als Array in der Variable $category. Mit $category[0]->cat_ID fragen wir die Kategorie-ID des ersten Objekts dieses Arrays ab und speichern diese wiederum in $currentcat.

Aktuelle Kategorie in der Post-Einzelansicht hervorheben

Die meisten von Euch werden das Kategoriemenü entweder in der header.php oder in der sidebar.php haben. Dort können wir nun die aktuelle Kategorie abfragen und das Menü zwingen, uns den Listenpunkt der ersten Kategorie des Posts mit der Klasse current-cat zu belegen.

<ul id='cat-menu'>
    <?php
    $category = get_the_category();
    $currentcat = $category[0]->cat_ID;
    wp_list_categories('title_li=&current_category='.$currentcat);
    ?>
</ul>

Relevante Links

, ,

Simon [webdemar]

Moin, ich bin Simon und betreibe webdemar.com als meine ernstgemeinte Spielwiese für WordPress, Webdesign und so.

RSS abonnieren Twitter

9 Kommentare

  1. Bantai - 8. Januar 2009 Antworten

    Danke, genau das habe ich gesucht :-D

  2. Marvin - 12. Januar 2009 Antworten

    jap, sehr hilfreich. danke sehr!

  3. Chris - 16. Juni 2009 Antworten

    Danke für den Post. Hat mir weitergeholfen!!!

  4. Jared - 24. Juni 2009 Antworten

    Hi :)

    genau diese Lösung habe ich gesucht!!! Danke dir ;)
    Ein Fehler steckt im letzten Codeschnippsel aber noch drin, in PHP Variablennamen darf kein “-” verwendet werden.

    Ich würde $current-cat in $currentcat ändern. Bei mir hats unter WordPress 2.8 nen dicken Fehler gemeldet.

    lg

  5. Jared - 26. Juni 2009 Antworten

    @webdemar

    Ein weiterer unschöner Nebeneffekt des Codes ist, das man auf der Startseite “Home” UND eine Kategorie als aktiven Menüpunkt vorgesetzt bekommt. Ich weiß nicht so recht warum WordPress das nicht abfangen kann aber ich hab das ganze mit einer is_single Abfrage ausgegrenzt.

    (is_single())

    = dein codeschnippsel

    else

    = wp_list_category

    • Simon [webdemar] - 26. Juni 2009 Antworten

      @Jared

      Den Code habe ich in der Zwischenzeit auch erweitert. Das könnte ich hier mal posten. In meinem Theme deStyle habe ich das erfolgreich wie folgt im Einsatz:

      • >">< ?php _e('Home','destyle'); ?>
      • < ?php if(is_single()) : $category = get_the_category(); $current_cat = $category[0]->cat_ID; else : $current_cat = ''; endif; $ex_cats = get_option('destyle_exclude_cats'); wp_list_categories('title_li=&current_category='.$current_cat.'&exclude='.$ex_cats); ?>
  6. Jared - 26. Juni 2009 Antworten

    Ja so ungefähr habe ich es bei mir auch gemacht. Nur den Home Button habe ich an anderer Stelle eingefügt :)

  7. Dietmar - 21. Mai 2010 Antworten

    Wow, endlich habe ich dadurch mein kleine s Problemchen mit den Kategorien lösen können! VIelen DanK!!!

Deine Meinung

WordPress.org

© 2009-2010 webdemar.com - Professionelle WordPress Themes