
Jak wyświetlić aktualną i nadrzędną kategorię wpisu? (Breadcrumbs Logic)
Spis treści
WordPress pozwala na tworzenie zagnieżdżonych kategorii:
Motoryzacja > Samochody > BMW
Gdy użytkownik czyta artykuł przypisany do kategorii “BMW”, warto pokazać mu, gdzie się znajduje. Popularne wtyczki SEO (Yoast) robią to automatycznie, ale co jeśli budujesz własny motyw i potrzebujesz tej logiki “na surowo”?
Prosta metoda: get_the_category_list()
WordPress ma wbudowaną funkcję, która zwraca listę z linkami, ale… sortuje je alfabetycznie, a nie hierarchicznie. To często błąd.
Poprawna metoda: Hierarchiczna
Aby wyświetlić “Rodzic > Dziecko”, musimy znaleźć kategorię, która nie ma dzieci przypisanych do tego posta, a następnie “iść w górę” do jej rodziców.
function wppoland_custom_breadcrumbs() {
// 1. Pobierz kategorie posta
$cats = get_the_category();
if ( ! empty( $cats ) ) {
// Zakładamy, że pierwsza kategoria to ta "główna" (najbardziej szczegółowa)
$cat = $cats[0];
// 2. Pobierz rodziców (z separatorem ' > ')
// Format: get_category_parents( $id, $link, $separator, $nicename )
$parents = get_category_parents( $cat->term_id, true, ' » ' );
echo '<div class="breadcrumbs">';
echo '<a href="' . home_url() . '">Start</a> » ';
echo $parents;
echo '<span>' . get_the_title() . '</span>';
echo '</div>';
}
}
Problem “Wielu Kategorii”
Jeśli zaznaczysz “BMW” i “Newsy”, WordPress może zgłupieć. Wtyczka Yoast SEO dodaje opcję “Primary Category” (Główna Kategoria). Możesz ją pobrać w PHP tak:
$primary_cat_id = get_post_meta($post->ID, '_yoast_wpseo_primary_category', true);
if($primary_cat_id){
$cat = get_category($primary_cat_id);
// ...reszta kodu
}
To zapewnia pełną kontrolę nad ścieżką użytkownika.