
Jak pobrać nazwę kategorii bez linku w WordPress? (get_the_category)
Spis treści
Standardowa funkcja WordPressa the_category() jest świetna, ale ma jedną wadę: zawsze generuje linki HTML (<a href="...">...</a>) do strony archiwum. Co zrobić, jeśli budujesz niestandardowy layout (np. kartę w portfolio lub slider), gdzie kategoria ma być tylko zwykłym tekstem, a nie klikalnym elementem?
Rozwiązaniem jest użycie funkcji get_the_category(), która zwraca tablicę obiektów, a nie gotowy kod HTML.
Kod (Snippet)
Oto gotowy fragment kodu, który możesz wkleić do swojego pliku single.php lub content.php:
<?php
// Pobierz wszystkie kategorie przypisane do bieżącego wpisu
$categories = get_the_category();
if ( ! empty( $categories ) ) {
// Wyświetl nazwę pierwszej znalezionej kategorii
echo esc_html( $categories[0]->name );
}
?>
Wyświetlanie listy kategorii po przecinku
Jeśli wpis ma wiele kategorii i chcesz je wylistować jako tekst rozdzielony przecinkami:
<?php
$categories = get_the_category();
$output = array();
if ( ! empty( $categories ) ) {
foreach ( $categories as $category ) {
// Dodaj nazwę do tablicy
$output[] = esc_html( $category->name );
}
// Połącz tablicę w string z separatorem
echo implode( ', ', $output );
}
?>
Dlaczego get_the_category()?
Funkcja ta daje Ci dostęp do pełnego obiektu kategorii. Oprócz nazwy (->name), możesz wyciągnąć:
->slug(przydatne do klas CSS, np.<span class="cat-<?php echo $cat->slug; ?>">)->term_id(ID kategorii)->description(opis kategorii)->count(liczba wpisów w tej kategorii)
Zastosowanie w praktyce
Częstym przypadkiem użycia (Use Case) jest stylowanie etykiet na kartach bloga.
// Wewnątrz pętli WordPress
$cats = get_the_category();
$first_cat = !empty($cats) ? $cats[0] : null;
if ($first_cat) : ?>
<span class="badge badge-<?php echo esc_attr($first_cat->slug); ?>">
<?php echo esc_html($first_cat->name); ?>
</span>
<?php endif; ?>
Dzięki temu, jeśli masz kategorię “News”, otrzymasz klasę .badge-news, którą łatwo pokolorujesz w CSS. To poziom kontroli, którego the_category() po prostu nie oferuje.