A função padrão do WordPress the_category() é ótima, mas tem uma desvantagem: gera sempre links HTML (<a href="...">...</a>) para a página de arquivo. E se estás a construir um layout personalizado (como um cartão de portfólio ou slider) onde a categoria deve ser apenas texto puro, não um elemento clicável?
A solução é usar get_the_category(), que retorna um array de objetos em vez de HTML pronto.
Código (snippet)
Aqui está um snippet pronto a usar que podes colar no teu single.php ou content.php:
<?php
// Obter todas as categorias atribuídas ao post atual
$categories = get_the_category();
if ( ! empty( $categories ) ) {
// Mostrar o nome da primeira categoria encontrada
echo esc_html( $categories[0]->name );
}
?>
Mostrar lista separada por vírgulas
Se o teu post tem várias categorias e queres listá-las como texto separado por vírgulas:
<?php
$categories = get_the_category();
$output = array();
if ( ! empty( $categories ) ) {
foreach ( $categories as $category ) {
// Adicionar nome ao array
$output[] = esc_html( $category->name );
}
// Juntar o array numa string com separador
echo implode( ', ', $output );
}
?>
Porquê get_the_category()?
Esta função dá-te acesso ao objeto completo da categoria. Para além do nome (->name), podes extrair:
->slug(útil para classes CSS, ex:<span class="cat-<?php echo $cat->slug; ?>">)->term_id(ID da categoria)->description(descrição da categoria)->count(número de posts nesta categoria)
Aplicação prática
Um caso de uso comum é estilizar etiquetas em cartões de blog.
// Dentro do loop do 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; ?>
Desta forma, se tens a categoria “Notícias”, obténs a classe .badge-noticias, que podes facilmente colorir em CSS. Este nível de controlo é algo que the_category() simplesmente não oferece.



