Sabe aquele momento em que você precisa mostrar determinados posts do WordPress com base em campos personalizados? Já passamos por isso. Quando começamos a usar o WordPress, ver qualquer trecho de código parecia intimidador, especialmente quando tudo o que queríamos era exibir posts com informações específicas.
Mas aqui está a boa notícia: depois de ajudar milhares de iniciantes no WordPress, descobrimos que mesmo algo que parece técnico, como a filtragem de campos personalizados, não precisa ser assustador. Na verdade, vamos orientá-lo em um método de código simples para fazer isso.
Essa solução funciona perfeitamente se você estiver publicando posts de blog regulares ou tipos de posts personalizados com base em critérios específicos.

Observação rápida: este tutorial serve para exibir posts do WordPress se eles tiverem um valor inserido em um campo personalizado específico.
Se você quiser exibir campos personalizados no front-end de um post do WordPress, leia nosso guia sobre como exibir campos personalizados em temas do WordPress.
Por que exibir posts do WordPress com um campo personalizado específico?
Ao criar uma postagem em seu site do WordPress, você pode usar campos personalizados para acrescentar metadados adicionais à postagem. Metadados são informações sobre a postagem, como título, autor e data de publicação.
Os campos personalizados são um conceito avançado do WordPress, e há muitas maneiras de adicionar campos personalizados no WordPress. Você encontrará muitas dicas úteis sobre como usar e exibir campos personalizados em nossa postagem, WordPress Custom Fields 101: Tips, Tricks, and Hacks.

Um de nossos usuários nos perguntou como exibir posts do WordPress somente se um campo personalizado específico estiver presente. Isso pode ser útil se você estiver procurando criar uma página personalizada que liste todas as postagens que contenham um campo e/ou valor personalizado específico.
Depois de respondermos com a resposta, achamos que seria melhor compartilhá-la com todos, para que a comunidade maior do WordPress.org também possa se beneficiar dela.
Edição dos arquivos de tema do WordPress: O que é preciso ter em mente
Para poder seguir este tutorial corretamente, aqui estão algumas coisas que você deve ter em mente:
- Este tutorial envolve a edição de seus arquivos de tema do WordPress com código, portanto, não é o mais adequado para iniciantes. Se você for novato nisso, precisará ler nosso guia sobre como copiar e colar código no WordPress.
- Recomendamos fazer backup do seu site e/ou usar um ambiente de teste para que o site ativo não seja afetado quando ocorrer um erro. Isso ocorre porque você estará adicionando código aos arquivos do tema, o que pode ser arriscado.
- Recomendamos entender como funciona a hierarquia de modelos do WordPress para que você saiba onde adicionar o código posteriormente.
- Você também precisará se familiarizar com o funcionamento dos loops do WordPress, pois chamaremos esses parâmetros em uma consulta do WordPress.
Além disso, observe que este tutorial só funciona com temas clássicos do WordPress, pois os temas de bloco têm um conjunto diferente de arquivos de tema.
Dito isso, vamos dar uma olhada em como exibir um post do WordPress somente se ele tiver um campo personalizado específico.
Como filtrar seus posts com base em campos personalizados específicos
Antes de mostrarmos o código a ser usado, você precisa saber em qual arquivo de tema deve ser adicionado. Muito provavelmente, será um modelo de página, como index.php, archive.php ou page.php.
Digamos que você queira adicioná-lo ao arquivo index.php do tema Twenty Twenty-One. Esta é a aparência da parte do loop do WordPress desse arquivo no momento:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php if ( have_posts() ) { // Load posts loop. while ( have_posts() ) { the_post(); get_template_part( 'template-parts/content/content' , get_theme_mod( 'display_excerpt_or_full_post' , 'excerpt' ) ); } // Previous/next page navigation. twenty_twenty_one_the_posts_navigation(); } else { // If no content, include the "No posts found" template. get_template_part( 'template-parts/content/content-none' ); } get_footer(); |
Esse código usa o loop padrão do WordPress(have_posts()
e the_post()
) para exibir posts. Esse método é adequado para a maioria dos temas padrão do WordPress e é usado para exibir posts sem qualquer filtragem ou classificação personalizada.
Agora, digamos que você use o campo personalizado “color” como no exemplo acima. Você precisará substituir todo esse código pelo trecho abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php // The Query to show a specific Custom Field $the_query = new WP_Query( 'meta_key=color' ); // Load posts loop. if ( $the_query ->have_posts() ) { while ( $the_query ->have_posts() ) { $the_query ->the_post(); get_template_part( 'template-parts/content/content' , get_theme_mod( 'display_excerpt_or_full_post' , 'excerpt' ) ); } // Previous/next page navigation. twenty_twenty_one_the_posts_navigation(); } else { // If no content, include the "No posts found" template. get_template_part( 'template-parts/content/content-none' ); } // Reset Post Data wp_reset_postdata(); get_footer(); |
Nesse novo código, introduzimos uma consulta personalizada($the_query = new WP_Query('meta_key=color');
) para buscar posts com base em um valor de campo personalizado específico na meta box (nesse caso, posts com um campo personalizado ‘color’).
Em seguida, ele usa um loop personalizado(if ($the_query->have_posts())
) para iterar os posts obtidos por essa consulta personalizada, exibindo o conteúdo de cada post da mesma forma que o primeiro snippet.
Também adicionamos a funçãowp_reset_postdata()
para garantir que o WordPress volte a exibir todos os posts corretamente após a consulta personalizada. Isso garante que o site funcione sem problemas e mostre o conteúdo correto aos usuários.
Agora, se você quiser mostrar posts específicos que tenham um campo personalizado com um valor específico, basta alterar a consulta da linha 3 da seguinte forma:
$the_query = new WP_Query( 'meta_value=blue' ); |
Isso exibirá todos os posts que têm um valor “azul” em qualquer campo personalizado.
Se você quiser ter certeza de que o campo “color” tem um valor “blue”, o código da consulta será parecido com este:
$the_query = new WP_Query( array ( 'meta_key' => 'color' , 'meta_value' => 'blue' ) ); |
Você pode saber mais sobre parâmetros adicionais que podem ser usados em sua consulta na página de referência de código WP_Query do WordPress.
Depois de salvar o código no arquivo PHP do modelo de página, você pode verificar seu site WordPress no front-end para ver o código em ação.
Deseja criar um site em WordPress sem todo o incômodo? Deixe que nossa equipe do WPBeginner Pro Services cuide disso para você. Nossa equipe de especialistas pode criar um site personalizado e profissional adaptado às suas necessidades, completo com recursos como uma página personalizada que filtra publicações com base em campos personalizados.
Saiba mais maneiras de personalizar seu site WordPress
Aqui estão mais maneiras de personalizar suas páginas do WordPress:
- Como estilizar categorias individuais de forma diferente no WordPress
- Como adicionar uma barra de rolagem personalizada no WordPress
- Como adicionar estilos personalizados aos widgets do WordPress
- Como dar um estilo diferente a cada post do WordPress
- Como usar códigos de acesso em seus temas do WordPress
- Como destacar novas postagens para visitantes que retornam no WordPress
- Como alterar a lateral da barra lateral no WordPress
Esperamos que este tutorial tenha ajudado você a aprender como exibir um post do WordPress somente se ele tiver um campo personalizado específico. Talvez você também queira ver nosso guia completo sobre como editar um site WordPress e nossas escolhas de especialistas dos melhores plug-ins Figma para WordPress.
Se você gostou deste artigo, inscreva-se em nosso canal do YouTube para receber tutoriais em vídeo sobre o WordPress. Você também pode nos encontrar no Twitter e no Facebook.
ahmed
i have a question sir if i want to display single post and custom fields then what i should do.
i dont want to display the post with specific custom fields. i want to display all custom fields of post
Dave101
Hi, thank for the useful tutorial. I have a question, in a wordpress website i set a meta value named “meta_country” and then i set every post with the country of the article, like “us”, “uk”, “fr”… Now I’m trying to add somewhere in the home of the blog a link that show list of all post with a specific country and a specific tag. For example all “UK” post tagged “APPLE”.
I don’t understand how to do that, someone could help me?
Максим Каминский
great thanks, it help wery well!
pjhooker
Thx!
Eduard Unruh
omg finally THANKS!
Mario M
I wasnt able to generate any results unless I included “post_type” parameter into the query.
ie: $the_query = new WP_Query(‘post_type=page&meta_key=color’);
sacha
Wonderful, just so simple and clean.
Thank you.
scottlee.me
@ad Great question! I’m curious too.
ad
Hi,
How could I show posts that DON’T have a specific Custom Field? Any idea?
Thanks!!!
tara tin
as I know from php it must be meta_key!=’your key’
;just you need to know that “!” means “not”
brunobruno2
Beatiful! Many thanks for sharing it. Works like a charm.