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_Query
incluindo 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:
have_posts() ) { // Start looping over the query results. while ( $query->have_posts() ) { $query->the_post(); // Contents of the queried post results go here. } } // Restore original post data. wp_reset_postdata(); ?>
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.
have_posts() ) { // Start looping over the query results. while ( $query->have_posts() ) { $query->the_post(); ?>> " title=""> " title="">
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:
have_posts() ) { echo ''; echo ' ' . __( 'Heading', 'tutsplus' ) . '
'; // Start looping over the query results. while ( $query->have_posts() ) { $query->the_post(); ?>> " title=""> " title=""> '; } // Restore original post data. wp_reset_postdata(); ?>
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:
'category-slug', 'post_type' => 'post' ); // Custom query. $query = new WP_Query( $args ); // Check that we have query results. if ( $query->have_posts() ) { echo '
- ';
// Start looping over the query results.
while ( $query->have_posts() ) {
$query->the_post();
?>
- > " title=""> '; } // Restore original post data. wp_reset_postdata(); ?>
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:
'post', 'posts_per_page' => '1' ); // First custom query. $query1 = new WP_Query( $args1 ); // Check that we have query results. if ( $query1->have_posts() ) { // Start looping over the query results. while ( $query1->have_posts() ) { $query1->the_post(); ?>> " title=""> " title=""> '1', 'post_type' => 'post' ); // Second custom query. $query2 = new WP_Query( $args2 ); // Check that we have query results. if ( $query2->have_posts() ) { echo '
- ';
// Start looping over the query results.
while ( $query2->have_posts() ) {
$query2->the_post();
?>
- > " title=""> '; } // Restore original post data. wp_reset_postdata(); ?>
-
'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 umli
elemento e um link para sua página.
Eu usei dois argumentos principais aqui:
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.
Originally posted 2022-06-17 12:32:59.