Jak wyświetlić aktualną i nadrzędną kategorię wpisu? (Breadcrumbs Logic)
PL

Jak wyświetlić aktualną i nadrzędną kategorię wpisu? (Breadcrumbs Logic)

5.00 /5 - (26 głosów )
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> &raquo; ';
        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.