Dominando WP_Query: Usando o Loop

Como esbocei na introdução desta série, o WP_Query classe tem quatro elementos principais:

  • os argumentos para a consulta, usando parâmetros que serão abordados em detalhes nesta série
  • a própria consulta
  • o loop, que produzirá o conteúdo do post, títulos ou o que você quiser exibir
  • finalizando: fechando as tags if e while e redefinindo os dados da postagem

Neste tutorial, mostrarei como usar o loop com WP_Queryincluindo as duas principais maneiras de estruturar seu loop e como usar vários loops.

Onde o laço se encaixa

Sem um loop, nada será exibido em sua página. Depois que o WordPress executa a consulta, usando os argumentos que você definiu, ele precisa ser informado sobre o que produzir dos dados obtidos. É aqui que entra o laço.

Portanto, o loop vem após sua consulta e usa três tags:

  • if( $query->have_posts() ) verifica se existem postagens.
  • while( $query->have_posts() ) repete o loop para cada postagem enquanto houver postagens para recuperar.
  • $query->the_post() acessa essa postagem específica.

Então é aqui que o loop se encaixa no WP_Query classe:

Depois de executar o loop, tudo o que resta a fazer é arrumar as coisas usando wp_reset_postdata().

Estrutura do Loop

A maneira como seu loop é estruturado dependerá de quais dados você deseja exibir em sua postagem. Aqui está um exemplo de loop que gera o título do post, a imagem em destaque e um trecho. Você usaria um loop como este em uma página de arquivo.

Este loop exibe exatamente o que descrevi acima: a imagem em destaque, título e trecho.

Levando o loop adiante: verificando o conteúdo

Mas às vezes você pode querer adicionar um título antes de sua lista de posts, ou você pode querer incluir todos eles em um elemento de contenção. Se você simplesmente adicionasse isso antes do seu loop, ele seria gerado independentemente de a consulta realmente retornar algum dado, o que significa que você poderia ter um cabeçalho sem nada abaixo dele ou alguma marcação desnecessária.

Isso é muito fácil de contornar colocando o elemento de fechamento ou o título dentro do seu if marcação:

Aqui você pode ver que verifiquei se há alguma postagem recuperada pela minha consulta e, se houver, abri um elemento de contenção e adicionei um título.

Isso também é útil se você deseja gerar os resultados de sua consulta como uma lista. Digamos que eu queira criar uma lista de todas as postagens em uma determinada categoria. o ul O elemento não está dentro do meu loop, pois não está relacionado a um post específico, mas eu só quero produzi-lo se houver posts. Então eu uso isso:

Isso verifica se a consulta buscou alguma postagem e, em caso afirmativo, abre o ul elemento e, em seguida, executa o loop.

Executando Loops Extras

É importante estar ciente de que, embora você possa usar WP_Query para executar mais de um loop, você precisa redefinir os dados do post e iniciar uma segunda instância de WP_Query para fazer isso. Isso ocorre porque cada um de seus loops produzirá dados com base em argumentos diferentes.

Este exemplo exibe o trecho e a imagem em destaque para a primeira postagem e, em seguida, apenas o título de cada postagem subsequente:

Eu usei dois argumentos principais aqui:

  • 'posts_per_page' => '1'usado com a primeira consulta, gera apenas a postagem mais recente.
  • 'offset' = '1'usado com a segunda consulta, pula a primeira postagem, garantindo que ela não seja repetida na lista abaixo.
  • Como você pode ver no código acima, o loop é um pouco diferente para cada consulta. O primeiro gera a imagem em destaque, título e trecho, enquanto o segundo verifica se a consulta possui postagens e, em caso afirmativo, abre um ul elemento e inclui cada título de postagem em um li elemento e um link para sua página.

Você também notará que eu usei wp_reset_postdata() após ambas as voltas. Se eu não tivesse feito isso, o segundo loop ainda produziria dados do primeiro.

Resumo

Sem laço, WP_Query realmente não faz muito. O loop é o código que você usa para exibir os dados que o WordPress buscou no banco de dados com base em seus argumentos de consulta.

Como demonstrei, existem algumas variações no loop. Um loop simples produzirá todos os posts na ordem que você especificou nos argumentos da sua consulta (ou por data em ordem decrescente por padrão). Se você separar if( $query->have_posts() ) e while( $query->have_posts() ), você pode inserir marcação adicional fora do seu loop, mas somente se sua consulta tiver retornado dados. E finalmente, especificando argumentos alternativos e usando wp_reset_postdata() após cada loop, você pode usar WP_Query mais de uma vez para criar vários loops em sua página.

Deixe um comentário

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