Postagens, páginas e tipos de postagem

Nesta parte desta série sobre WP_Queryvocê aprenderá a usar WP_Query para consultar postagens, páginas e tipos de postagem personalizados. Você pode consultar postagens e páginas específicas ou executar uma consulta para retornar postagens de um ou mais tipos de postagem.

Uma recapitulação de como os argumentos funcionam no WP_Query

Antes de começarmos, vamos recapitular rapidamente como os argumentos funcionam em WP_Query. quando você codificar WP_Query em seus temas ou plugins, você precisa incluir quatro elementos principais:

  • os argumentos para a consulta, usando parâmetros que serão abordados neste tutorial
  • a própria consulta
  • o laço
  • finalizando: fechando as tags if e while e redefinindo os dados da postagem

Na prática, isso será algo como o seguinte:

Os argumentos são o que diz ao WordPress quais dados devem ser buscados no banco de dados e são esses que abordarei aqui. Então, tudo o que estamos focando aqui é a primeira parte do código:

Como você pode ver, os argumentos estão contidos em uma matriz. Você aprenderá a codificá-los enquanto trabalha neste tutorial.

Codificando seus argumentos

Existe uma maneira específica de codificar os argumentos na matriz, que é a seguinte:

Você deve colocar os parâmetros e seus valores entre aspas simples, use => entre eles e separe-os com uma vírgula. Se você errar, o WordPress pode não adicionar todos os seus argumentos à consulta ou você pode obter uma tela branca.

Consulta de postagens ou páginas únicas

Vamos começar com o cenário mais simples: executar uma consulta para encontrar uma postagem ou página específica.

Consultando uma postagem

Para encontrar uma postagem específica (ou conjunto de postagens), você tem duas opções:

  • p (int): Use o ID da postagem.
  • name (fragmento): Use post slug.

Você pode usar esses parâmetros com qualquer tipo de postagem, incluindo postagens, páginas, anexos e tipos de postagem personalizados. Por padrão, o WordPress consultará o 'post' tipo de postagem e não retornar páginas ou tipos de postagem personalizados — se você quiser fazer isso, precisará adicionar mais argumentos ou usar um argumento diferente, que abordarei mais adiante neste tutorial.

Então, para retornar um post específico, você usaria um destes:

ou:

Observe que o name parâmetro leva o post slug como seu argumento, não seu título.

Usando o name O parâmetro facilita a identificação do que sua consulta buscará no banco de dados quando você revisitar seu código posteriormente, mas existe o risco de que não funcione se um dos usuários do seu site alterar o slug de postagem. O ID da postagem não pode ser alterado, por isso é mais seguro.

Aqui está o resultado da execução das duas consultas acima para mim.

WP_Query para postagem únicaWP_Query para postagem únicaWP_Query para postagem única

Consulta para uma página

Para consultar uma página específica, você tem duas opções novamente:

  • page_id (int): Use o ID da página.
  • pagename (fragmento): Use slug de página.

Portanto, para executar uma consulta buscando apenas uma página específica do banco de dados, você usaria um destes:

ou:

Você deve ter notado que passamos 20 como uma corda para page_id em nosso exemplo. Esse 20 é convertido em um inteiro porque page_id espera que o parâmetro seja um inteiro.

Recuperei as seguintes páginas executando as consultas acima.

WP_Query para página únicaWP_Query para página únicaWP_Query para página única

Consultando uma postagem de outro tipo

Para executar uma consulta para uma postagem de outro tipo de postagem, incluindo um tipo de postagem personalizado, você também usaria o post_type parâmetro. Abordarei isso com um pouco mais de detalhes posteriormente neste tutorial, mas em resumo, para consultar um único post no product tipo de postagem personalizado, você usaria isso:

Ou para consultar um anexo, você usaria:

Recebo uma imagem se eu executar a segunda consulta.

WP_Query Post ID e TipoWP_Query Post ID e TipoWP_Query Post ID e Tipo

Como consultar páginas filhas

Às vezes, você pode precisar recuperar todas as páginas filhas de uma determinada página, por exemplo, se seu site tiver uma estrutura de página hierárquica e você quiser exibir uma lista em cada página filha dessa página.

Você não faria isso com postagens, pois elas não são hierárquicas, embora você possa fazer com um tipo de postagem personalizado se for hierárquico.

Você tem três argumentos que você pode usar para fazer isso:

  • post_parent (int): Use o ID da página para retornar apenas as páginas filhas. Defina como 0 para retornar apenas as entradas de nível superior.
  • post_parent__in (variedade): Use uma matriz de IDs de postagem.
  • post_parent__not_in (variedade): Use uma matriz de IDs de postagem.

Vamos dar uma olhada em cada um deles.

O primeiro, post_parentpermite consultar páginas que são filhas de uma página específica.

Então, para encontrar todas as páginas que são filhas de uma determinada página, você usaria isto:

Observe que você deve incluir o post_type argumento como o tipo de postagem padrão que WP_Query procura é post.

Levando isso adiante, é assim que você o usaria para encontrar filhos da página atual:

Você também pode usar este parâmetro para identificar páginas de nível superior, ou seja, aquelas sem pai:

Mas e se você quiser identificar filhos de várias páginas? Você também pode fazer isso com o post_parent__in parâmetro. Isso leva uma matriz de IDs de postagem.

Então, para consultar os filhos de duas de suas páginas, você usaria isto:

Você também pode excluir páginas filhas de sua consulta, usando o post_parent__not_in parâmetro:

Consultando várias postagens

Também é comum executar uma consulta para incluir ou excluir várias postagens. Você tem dois argumentos que você pode usar para isso:

  • post__in (variedade): Use IDs de postagem.
  • post__not_in (variedade): Use IDs de postagem.

o post__in argumento pode ser usado para todos os tipos de postagem e recebe uma matriz de IDs. Então, para gerar uma lista de postagens específicas, você usaria isto:

WP_Query Vários Posts RecuperadosWP_Query Vários Posts RecuperadosWP_Query Vários Posts Recuperados

Você deve ter notado que a lista de postagens recuperadas não inclui postagens com IDs 704 e 224. Isso ocorre porque o WordPress só buscará postagens publicadas por padrão. É possível recuperar postagens com status diferentes definindo o valor de post_status argumento para 'any'. Você pode aprender mais sobre esse argumento e seus possíveis valores válidos aqui.

Post WP_Query com qualquer statusPost WP_Query com qualquer statusPost WP_Query com qualquer status

Você provavelmente também está se perguntando sobre a primeira postagem na lista recuperada. Observe que, se você usar o post__in argumento para buscar posts, o WordPress ainda buscará posts fixos, mesmo que não estejam na sua lista, como você pode ver na imagem acima. Para omiti-los, você usa o ignore_sticky_posts argumento:

WP_Query Quaisquer Posts Ignorando StickyWP_Query Quaisquer Posts Ignorando StickyWP_Query Quaisquer Posts Ignorando Sticky

o post__not_in O argumento funciona de maneira semelhante, novamente pegando uma matriz de IDs de postagem, mas produzirá todo o resto, exceto as postagens listadas. Você normalmente o combinaria com outros argumentos para evitar a saída de uma lista enorme de postagens.

Tenha em mente que você não pode usar ambos post__in e post_not__in argumentos na mesma consulta.

Então, para consultar todos os posts do product tipo de postagem, mas exclua alguns:

Então, para combinar isso com um de nossos exemplos anteriores, veja como você consultaria todas as páginas de nível superior, exceto a atual:

Observe que, se você também registrou um tipo de postagem hierárquica, precisará incluir o post_type parâmetro neste código para apenas consultar as páginas.

Consultando tipos de postagem

Em alguns dos exemplos acima eu usei o post_type parâmetro para identificar postagens de um determinado tipo. Vamos dar uma olhada nos argumentos que você pode usar com esse parâmetro:

  • post: Uma postagem.
  • page: Uma página.
  • revision: Uma revisão.
  • attachment: Um anexo.
  • nav_menu_item: Um item do menu de navegação.
  • any: Recupera qualquer tipo exceto revisões e tipos com 'exclude_from_search' definido como true quando foram registrados
  • Tipos de postagem personalizados (por exemplo, product).

Como vimos acima, você pode usar esse parâmetro com outros argumentos para tornar sua consulta mais específica.

O valor para post_type é normalmente definido para post por padrão. No entanto, torna-se any sempre que usar o tax_query argumento em suas consultas.

Então, para dar um exemplo simples, veja como você consultaria todas as páginas do seu site:

Tipos de postagem personalizados

Consultar um tipo de postagem personalizado é simples: use o nome que você deu ao tipo de postagem ao registrá-lo, não o título que é usado nos menus de administração. Então, digamos que você registrou seus tipos de postagem de produto usando register_post_type() do seguinte modo:

O valor que você usa para o post_type argumento ao consultar produtos não é 'Product' ou 'Products' mas 'product':

Anexos

Por padrão, se você tentar executar uma consulta de anexos, não funcionará, pois o WordPress define o post_status de anexos para inherit e WP_Query padrão para 'post_status' => 'publish' a menos que você especifique o contrário. Então, se você quiser consultar anexos, você devo incluir o post_status argumento:

Observe que você também pode usar any ao invés de inherit.

Resumo

Usando WP_Query criar consultas personalizadas para postagens e tipos de postagem é algo que faço muito. Como você viu nos exemplos aqui, há muitas possibilidades:

  • Use-o para consultar páginas de nível superior em seu site.
  • Use-o para consultar postagens de um tipo de postagem específico.
  • Use-o para consultar todas as postagens, exceto as que você especificar.
  • Use-o para consultar todos os filhos da página atual.

Existem muitas outras possibilidades usando os argumentos abordados aqui, mas isso deve lhe dar uma amostra.

Este post foi atualizado com contribuições de Nitish Kumar. Nitish é um desenvolvedor web com experiência na criação de sites de comércio eletrônico em várias plataformas. Ele passa seu tempo livre trabalhando em projetos pessoais que facilitam sua vida cotidiana ou fazendo longas caminhadas noturnas com os amigos.

Deixe um comentário

O seu endereço de e-mail não será publicado.