Como exibir um banner apenas numa categoria específica? Um guia para programadores sobre condições avançadas.
PT-PT

Como verificar se um post pertence a um termo de taxonomia específico?

5.00 /5 - (29 votes )
Última verificação: 1 de março de 2026
Experiência: 5+ anos de experiência
Índice

Uma tarefa comum para um programador é exibir um elemento (ex: um banner publicitário) apenas se o post pertencer a uma categoria ou taxonomia específica (ex: ‘Género de Filme: Comédia’).

No WordPress, temos duas funções principais para isto que são frequentemente confundidas: is_tax() e has_term(). A diferença entre elas é crucial para a lógica do seu tema.


1. Is_tax() vs has_term() – Qual é a diferença?

Is_tax() – Contexto da página (arquivo)

Use isto para verificar que página o utilizador está a ver.

  • O utilizador está atualmente na página de arquivo da categoria “Terror”?
if ( is_tax( 'genero', 'terror' ) ) {
    echo 'Você está na lista de terror!';
}

Esta função retornará false se estiver numa página de Post Único (Single Post), mesmo que esse post seja, de facto, um filme de terror!

Has_term() – Contexto do post (single)

Use isto para verificar o que está atribuído a um post específico.

  • Este filme específico é de “Terror”?
if ( has_term( 'terror', 'genero' ) ) {
    echo 'Este post é um filme de terror.';
}

Esta função é mais frequentemente usada dentro do The Loop ou no ficheiro single.php.


2. O problema da hierarquia (pais e filhos)

O maior desafio é que has_term() verifica apenas exatamente o termo que especificar.

Assuma esta estrutura:

  • Filmes (Taxonomia: movie_genre)
    • Comédia (ID: 10)
      • Romântica (ID: 11)
      • Comédia Negra (ID: 12)

Se tiver um post atribuído APENAS a “Romântica”, a verificação:

has_term( 'comedia', 'movie_genre' ) 

retornará FALSE. Porquê? Porque o post tecnicamente não tem a caixa de seleção “Comédia” marcada, apenas “Romântica”.

Solução: Função auxiliar para descendentes

Para verificar se um post pertence à categoria “Comédia” OU a qualquer uma das suas subcategorias, precisamos de escrever a nossa própria função auxiliar.

/**
 * Verifica se um post pertence a um termo ou aos seus filhos.
 */
function wppoland_in_term_tree( $term_id_or_slug, $taxonomy, $post_id = null ) {
    $post_id = $post_id ? $post_id : get_the_ID();
    $term    = get_term_by( is_numeric($term_id_or_slug) ? 'id' : 'slug', $term_id_or_slug, $taxonomy );

    if ( ! $term ) {
        return false;
    }

    // 1. Verificar atribuição direta (mais rápido)
    if ( has_term( $term->term_id, $taxonomy, $post_id ) ) {
        return true;
    }

    // 2. Obter todos os filhos do termo
    $children = get_term_children( $term->term_id, $taxonomy );
    
    if ( is_wp_error( $children ) || empty( $children ) ) {
        return false;
    }

    // 3. Verificar se o post tem algum dos filhos
    return has_term( $children, $taxonomy, $post_id );
}

Uso:

// No single.php
if ( wppoland_in_term_tree( 'comedia', 'movie_genre' ) ) {
    get_template_part( 'partials/banner-comedy' );
}

3. Otimização de performance

A função get_term_children() executa uma consulta à base de dados. Se usar isto num loop que exibe 50 posts, está a fazer 50 consultas SQL extra.

Uma otimização importante é passar o ID em vez do Slug. O WordPress tem de procurar o ID a partir do Slug de qualquer forma, por isso fornecer o ID (ex: 10) poupa uma consulta de pesquisa.

// Mais rápido (ID)
has_term( 10, 'movie_genre' );

// Mais lento (Slug -> requer pesquisa)
has_term( 'comedia', 'movie_genre' );

Resumo

  1. Use is_tax() apenas para verificar se está numa página de arquivo.
  2. Use has_term() para verificar logicamente posts individuais.
  3. Lembre-se que has_term não herda – se precisar de lógica “categoria e filhos”, use uma função auxiliar personalizada.
O que é Como verificar se um post pertence a um termo de taxonomia específico?
Como verificar se um post pertence a um termo de taxonomia específico? é relevante quando pretende um WordPress mais estável, melhor desempenho e menos falhas em produção.
Como implementar Como verificar se um post pertence a um termo de taxonomia específico?
Comece com uma auditoria de base, defina âmbito e restrições, e implemente alterações em passos pequenos e testáveis.
Porque é que Como verificar se um post pertence a um termo de taxonomia específico é importante?
Os maiores ganhos vêm, normalmente, da qualidade técnica, de uma estrutura de conteúdo clara e de verificação regular.

Precisa de FAQ adaptado ao setor e mercado? Criamos uma versão alinhada com os seus objetivos de negócio.

Fale connosco

Artigos Relacionados