Tutoriais confiáveis de WordPress, quando você mais precisa.
Guia para Iniciantes em WordPress
WPB Cup
Mais de 25 Milhões
Sites usando nossos plugins
16+
Anos de experiência com WordPress
3000+
Tutoriais de WordPress por especialistas

Como Exibir um Post do WordPress Apenas se Ele Tiver um Campo Personalizado Específico

Sabe quando você precisa exibir um post do WordPress apenas se ele tiver um campo personalizado específico? Nós já passamos por isso.

Quando começamos com o WordPress, ver qualquer trecho de código parecia intimidante, especialmente quando tudo o que queríamos era exibir postagens com informações específicas.

Mas eis a boa notícia: depois de ajudar milhares de iniciantes no WordPress, descobrimos que até mesmo algo que soa técnico, como a filtragem por campos personalizados, não precisa ser assustador.

Na verdade, vamos guiá-lo por um método de código simples para fazer isso.

Esta solução funciona perfeitamente, quer você esteja publicando postagens regulares de blog ou tipos de postagem personalizados com base em critérios específicos.

Como Exibir um Post do WordPress Apenas se Ele Tiver um Campo Personalizado Específico

💡 Resumindo: Você pode mostrar apenas posts do WordPress que têm um campo personalizado específico usando um WP_Query personalizado em seus arquivos de tema (como index.php) para filtrar esses posts.

📌 Observação Rápida: Este tutorial é para exibir posts do WordPress se eles tiverem um valor inserido em um campo personalizado específico. Se você deseja exibir campos personalizados no front-end de um post do WordPress, pode ler nosso guia sobre como exibir campos personalizados em temas do WordPress.

Por que exibir postagens do WordPress com um campo personalizado específico?

Ao criar uma postagem em seu site WordPress, você pode usar campos personalizados para adicionar metadados adicionais à postagem.

Metadados são informações extras que você pode adicionar a uma postagem. Por exemplo, se você estivesse escrevendo uma resenha de livro, poderia adicionar campos personalizados para ‘Nome do Autor’ ou ‘Avaliação por Estrelas’.

Campos personalizados são um conceito avançado do WordPress, e existem muitas maneiras de adicionar campos personalizados no WordPress. Você encontrará muitas dicas úteis sobre como usar e exibir campos personalizados em nossa postagem, Campos Personalizados do WordPress 101: Dicas, Truques e Hacks.

Você Pode Adicionar Metadados a um Post Usando Campos Personalizados

Um de nossos usuários nos perguntou como exibir postagens do WordPress apenas se um campo personalizado específico estivesse presente. Isso pode ser útil se você estiver procurando criar uma página personalizada que liste todas as postagens que contêm um campo personalizado e/ou valor específico.

Após responder com a solução, pensamos que seria melhor compartilhá-la com todos para que a comunidade maior do WordPress.org também pudesse se beneficiar dela.

Editando Seus Arquivos de Tema do WordPress: O Que Ter em Mente

Antes de começar, há algumas coisas importantes que você deve ter em mente ao trabalhar com arquivos de tema.

Se você adicionar código diretamente aos seus arquivos de tema, suas alterações serão perdidas na próxima vez que você atualizar seu tema.

É por isso que recomendamos o uso de um plugin como o WPCode para adicionar com segurança código PHP personalizado sem editar seus arquivos de tema. Se você prefere editar arquivos de tema, certifique-se de estar usando um tema filho para que suas alterações sejam preservadas.

Para poder seguir este tutorial corretamente, aqui estão algumas coisas que você deve ter em mente:

  1. Este tutorial envolve adicionar código ao seu site WordPress, portanto, não é o mais adequado para iniciantes completos. Se você é novo nisso, precisará ler nosso guia sobre como copiar e colar código no WordPress.
  2. Recomendamos fazer backup do seu site e/ou usar um ambiente de staging para que seu site ativo não seja afetado quando ocorrer um erro. Isso ocorre porque você adicionará código aos arquivos do seu tema, o que pode ser arriscado.
  3. Recomendamos entender como a hierarquia de modelos do WordPress funciona para que você saiba onde adicionar o código posteriormente.
  4. Você também precisará se familiarizar com o funcionamento dos loops do WordPress, pois chamaremos esses parâmetros em uma consulta do WordPress.

📍Observação Importante: Este tutorial funciona apenas com temas WordPress clássicos. Temas de bloco usam o Editor de Site e uma abordagem diferente para exibir conteúdo, portanto, este método de edição de arquivos de modelo não se aplicará.

Dito isso, vamos ver como exibir uma postagem do WordPress apenas se ela tiver um campo personalizado específico.

Etapa 1: Instale um Plugin de Snippet de Código

Alguns tutoriais dirão para você abrir o arquivo index.php do seu tema e reescrever completamente o loop do WordPress usando algo chamado WP_Query. Não recomendamos fazer isso.

Modificar os arquivos de modelo principais pode quebrar o layout do seu site, causar consultas duplicadas ao banco de dados que deixam seu site lento e quebrar completamente sua paginação (os botões “Próxima Página”).

Em vez disso, a maneira mais segura e eficiente de fazer isso é usando o hook de ação pre_get_posts. Isso diz ao WordPress para filtrar os posts *antes* mesmo de carregar o modelo da página.

Para adicionar este código personalizado, recomendamos o uso de um plugin como o WPCode. Ele permite que você adicione código PHP com segurança sem tocar diretamente nos arquivos do seu tema, o que significa que seu site não quebrará se você cometer um erro, e suas alterações não serão perdidas quando seu tema for atualizado.

Etapa 2: Adicione o Código da Consulta Personalizada

Depois de instalar e ativar o WPCode, navegue até Snippets de Código » Adicionar Snippet no seu painel do WordPress e selecione ‘Adicionar Seu Código Personalizado (Novo Snippet)’.

Adicionar snippet personalizado no WPCode

Certifique-se de que o “Tipo de Código” esteja definido como Snippet PHP.

Em seguida, cole o seguinte código:

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_custom_field' );

function wpb_filter_posts_by_custom_field( $query ) {

    // Only modify the main query on the front-end homepage
    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        // Tell WordPress to only get posts with the custom field key 'color'
        $query->set( 'meta_key', 'color' );

    }
}

Primeiro, o código verifica se ele está alterando apenas a consulta principal no front-end do seu site (especificamente a página inicial do blog), deixando seu painel de administração do WordPress completamente intacto.

Em seguida, ele usa $query->set para dizer ao WordPress para recuperar apenas posts que tenham o campo personalizado ‘color’ associado a eles.

Como este código modifica a consulta antes do carregamento da página, a paginação padrão do seu tema funcionará perfeitamente sem nenhum código extra! Simplesmente ative o interruptor do WPCode para Ativo e clique no botão ‘Salvar Snippet’ para publicá-lo.

Etapa 3: Filtrar por Valor de Metadados Específico (Opcional)

E se você quiser encontrar posts onde o campo personalizado ‘color’ tenha um valor específico, como ‘blue’? Para fazer isso, você só precisa adicionar uma regra meta_value ao seu código.

Seu snippet atualizado ficará assim:

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_custom_field_value' );

function wpb_filter_posts_by_custom_field_value( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $query->set( 'meta_key', 'color' );
        $query->set( 'meta_value', 'blue' );

    }
}

Etapa 4: Filtrar por Comparação de Metadados (Opcional)

Você pode levar sua filtragem ainda mais longe com o parâmetro meta_compare. Isso permite que você encontre posts que não correspondem a um valor.

Por exemplo, para exibir todos os posts onde a cor é não ‘blue’, sua consulta ficaria assim:

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_meta_compare' );

function wpb_filter_posts_by_meta_compare( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $query->set( 'meta_key', 'color' );
        $query->set( 'meta_value', 'blue' );
        $query->set( 'meta_compare', '!=' );

    }
}

O != diz ao WordPress para encontrar todos os posts onde o campo 'color' existe, mas não é igual a 'blue'.

Existem muitos outros operadores de comparação que você pode usar, que podem ser encontrados na documentação oficial do desenvolvedor do WordPress.

Etapa 5: Filtrar Posts por Campos Personalizados Múltiplos (meta_query)

Para cenários mais complexos onde você precisa filtrar posts com base em múltiplos campos personalizados ou combinar condições (como AND/OR), você usará o array meta_query.

Isso permite que você defina um array de condições, cada uma visando um campo personalizado ou valor diferente.

Por exemplo, para exibir posts com a cor ‘blue’ e tamanho ‘large’, seu código ficaria assim:

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_multiple_fields' );

function wpb_filter_posts_by_multiple_fields( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $meta_query = array(
            'relation' => 'AND', // or 'OR'
            array(
                'key'     => 'color',
                'value'   => 'blue',
                'compare' => '=',
            ),
            array(
                'key'     => 'size',
                'value'   => 'large',
                'compare' => '=',
            ),
        );

        $query->set( 'meta_query', $meta_query );

    }
}

Esta consulta recuperará posts que tenham tanto o campo personalizado ‘color’ definido como ‘blue’ QUANTO o campo personalizado ‘size’ definido como ‘large’.

Você pode ajustar o parâmetro 'relation' para ‘OR’ para encontrar posts que correspondam a pelo menos uma das condições.

Exemplo do Mundo Real: Exibir Apenas Avaliações 5 Estrelas

Digamos que você gerencie um site de resenhas de livros do WordPress e use um campo personalizado chamado star_rating para armazenar pontuações de avaliações.

Você pode facilmente exibir apenas posts que tenham uma avaliação 5 estrelas na página inicial do seu blog usando esta consulta:

<?php
add_action( 'pre_get_posts', 'wpb_show_only_five_star_reviews' );

function wpb_show_only_five_star_reviews( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $query->set( 'meta_key', 'star_rating' );
        $query->set( 'meta_value', '5' );

    }
}

Isso é extremamente útil se você quiser garantir que seu feed principal apresente apenas seu conteúdo com as melhores avaliações.

Perguntas Frequentes Sobre Exibir um Post Se Ele Tiver um Campo Personalizado Específico

Aqui estão algumas perguntas que nossos leitores frequentemente fazem sobre exibir um post se ele tiver apenas um campo personalizado específico:

Perguntas Frequentes Sobre Exibir um Post Se Ele Tiver um Campo Personalizado Específico

Aqui estão algumas perguntas que nossos leitores frequentemente fazem sobre exibir um post se ele tiver apenas um campo personalizado específico:

Existe uma maneira de fazer isso sem editar os arquivos do tema?

Sim! Na verdade, o método pre_get_posts que descrevemos neste tutorial foi especificamente projetado para que você não precise editar os arquivos do seu tema. Ao usar um plugin de snippet como o WPCode, você pode aplicar este filtro com segurança ao seu site sem tocar em uma única linha do código principal do seu tema.

Posso filtrar posts por múltiplos campos personalizados?

Você pode. O hook pre_get_posts aceita argumentos complexos. Você usaria um array ‘meta_query’, que permite construir uma lista de condições para corresponder a múltiplos campos personalizados de uma vez.

Este método funciona com temas de blocos?

Embora o hook pre_get_posts possa tecnicamente interagir com temas de blocos, o bloco nativo Query Loop do WordPress não possui uma interface integrada para filtragem de campos personalizados pronta para uso. Se você estiver usando um tema de bloco Full Site Editing, a abordagem mais fácil é usar um plugin que adicione filtragem de campos personalizados ao bloco Query Loop, em vez de escrever PHP personalizado.

Qual é a diferença entre 'meta_key' e 'meta_value'?

Pense em 'meta_key' como o nome do rótulo, como 'Cor' ou 'Status'. O 'meta_value' é o dado real inserido nesse campo, como 'Azul' ou 'Publicado'.

Usar a chave encontra qualquer postagem com esse campo personalizado associado a ela, enquanto usar o valor o filtra para encontrar apenas postagens com essa informação específica.

Saiba Mais Maneiras de Personalizar Seu Site WordPress

Aqui estão mais maneiras de personalizar suas páginas do WordPress:

Esperamos que este tutorial tenha ajudado você a aprender como exibir uma postagem do WordPress apenas se ela tiver um campo personalizado específico. Você também pode querer ver nosso guia completo sobre como editar um site WordPress e nossas melhores escolhas de especialistas dos melhores plugins Figma para WordPress.

Se você gostou deste artigo, por favor, inscreva-se em nosso Canal do YouTube para tutoriais em vídeo do WordPress. Você também pode nos encontrar no Twitter e no Facebook.

Divulgação: Nosso conteúdo é apoiado pelo leitor. Isso significa que se você clicar em alguns de nossos links, poderemos ganhar uma comissão. Veja como o WPBeginner é financiado, por que isso importa e como você pode nos apoiar. Aqui está nosso processo editorial.

O Kit de Ferramentas Definitivo para WordPress

Obtenha acesso GRATUITO ao nosso kit de ferramentas - uma coleção de produtos e recursos relacionados ao WordPress que todo profissional deve ter!

Interações do Leitor

11 ComentáriosDeixe uma Resposta

  1. Tenho uma pergunta, senhor, se eu quiser exibir um único post e campos personalizados, o que devo fazer.
    Eu não quero exibir o post com campos personalizados específicos. Eu quero exibir todos os campos personalizados do post

  2. Oi, obrigado pelo tutorial útil. Tenho uma pergunta, em um site WordPress, defini um valor meta chamado "meta_country" e depois defini cada post com o país do artigo, como "us", "uk", "fr"... Agora estou tentando adicionar em algum lugar na página inicial do blog um link que mostre a lista de todos os posts com um país específico e uma tag específica. Por exemplo, todos os posts "UK" com a tag "APPLE".
    Eu não entendo como fazer isso, alguém poderia me ajudar?

  3. Não consegui gerar nenhum resultado a menos que eu incluísse o parâmetro “post_type” na consulta.

    ie: $the_query = new WP_Query(‘post_type=page&meta_key=color’);

Deixe uma resposta

Obrigado por escolher deixar um comentário. Por favor, tenha em mente que todos os comentários são moderados de acordo com nossa política de comentários, e seu endereço de e-mail NÃO será publicado. Por favor, NÃO use palavras-chave no campo do nome. Vamos ter uma conversa pessoal e significativa.