Rozwijane (prawie) menu kategorii za pomocą CSS
Gdy strona posiada wielopoziomową strukturę kategorii, to zazwyczaj kategorii tych jest sporo. Z tego też powodu być może chcielibyśmy ukryć część z nich. Jednym z rozwiązań może być chowanie podkategorii, dopóki użytkownik nie wybierze kategorii nadrzędnej. Pokażę Ci, jak osiągnąć taki efekt przy wykorzystaniu tylko arkuszy stylów CSS (przy pewnych dodatkowych założeniach).
Co chcemy osiągnąć?
Chcemy sprawić, aby w liście kategorii widoczne były tylko kategorie nadrzędne oraz ewentualne podkategorie kategorii wybranej.
Dodatkowe założenia
Przyjmijmy, że struktura kategorii jest dwupoziomowa (używamy tylko kategorii głównych i ich bezpośrednich podkategorii). Na pierwszy rzut oka założenie to może wydawać się bardzo wielkim ograniczeniem, jednak w praktyce bardzo często 2 poziomy powinny być wystarczające.
Załóżmy ponadto, że kategorie naprawdę są kategoriami, a nie tagami, czyli że każdy wpis jest przyporządkowany do dokładnie jednej kategorii (wpisy bez kategorii przyporządkowane są do kategorii „Bez kategorii”).
Rozwiązanie
Tym razem naprawdę nie będziesz musiał się napracować. Wystarczy bowiem, że dodasz do arkusza stylów wybranej przez siebie skórki dwie następujące linijki:
li.cat-item li {display: none;}
li.current-cat-parent li, li.current-cat li {display: list-item;}
I jeszcze parę słów wyjaśnienia. Pierwsza linijka odpowiedzialna jest za ukrycie wszystkich podkategorii. Druga natomiast, pokazuje z powrotem podkategorie wybranej kategorii głównej lub też podkategorie rodzica wybranej kategorii.
Co jeszcze jest nie tak?
Jeśli korzystasz z widgeta kategorii w sidebarze, napotkasz niestety pewien problem. Otóż po rozwinięciu danej kategorii i wybraniu jednego z wpisów do niej przypisanych, drzewo kategorii zwinie się. Na szczęście problem ten można dość łatwo naprawić.
W tym celu zrezygnuj z widgeta kategorii, a następnie umieść w odpowiednim miejscu plików swojej skórki ręczne wypisywanie drzewa kategorii:
<?php
if (is_single()) {
$cats = get_the_category();
wp_list_categories("current_category={$cats[0]->term_id}");
} else
wp_list_categories();
?>
Powyższy fragment kodu pobiera pierwszą z kategorii, do których przypisany jest bieżący wpis, a następnie wypisuje drzewo kategorii, zaznaczając ją jako aktualną.
Co dalej?
Ponownie przypomnę o tym, abyś wykonał kopie bezpieczeństwa, przed dokonaniem jakichkolwiek zmian w plikach skórki Twojego WordPressa.
Jeśli masz jakieś pytania lub uwagi – śmiało – podziel się nimi w komentarzach.
