Marcelo Mesquita

Apenas mais um desenvolvedor WordPress

Multiplos Loops

Para deixar seu blog com mais cara de site um dica é mudar o modelo de apresentação das notícias nas áreas principais. Ao invés da lista corrida dos últimos posts na home do blog, colunas organizam melhor as notícias além de permitir uma visão mais ampla do conteúdo, por exemplo, você pode dividir seu site em sessões e então listar na home as últimas notícias de cada sessão, deixando a disposição mais equilibrada. Dessa forma também é possível agrupar uma quantidade maior de posts evitando que os visitantes fiquem rolando o site ou procurando o conteúdo através da paginação.

O ‘WP_Query’ é a classe responsável pelos loops no WordPress, com ele podemos criar consultas no site que estarão amparadas por todas as funções presentes no Loop do WordPress facilitando todo o serviço de criação de novas colunas. A forma como ele funciona é semelhante ao ‘query_posts‘, inclusive os argumentos são os mesmos.

Aqui vai um exemplo:

<span style="color: #990000;">&lt;?php $noticias = new WP_Query(&quot;category_name=noticias&amp;showposts=3&quot;); ?&gt;</span>
&lt;?php if($noticias-&gt;have_posts()) : ?&gt;
&lt;div class=&quot;noticias&quot;&gt;
&lt;?php while($noticias-&gt;have_posts()) : $noticias-&gt;the_post(); ?&gt;
trecho da interface a ser repetido...
&lt;?php endwhile; ?&gt;
&lt;/div&gt;
&lt;?php endif; ?&gt;
&nbsp;
<span style="color: #990000;">&lt;?php $artigos = new WP_Query(&quot;category_name=artigosamp;showposts=3&quot;); ?&gt;</span>
&lt;?php if($artigos-&gt;have_posts()) : ?&gt;
&lt;div class=&quot;artigos&quot;&gt;
&lt;?php while($artigos-&gt;have_posts()) : $artigos-&gt;the_post(); ?&gt;
trecho da interface a ser repetido...
&lt;?php endwhile; ?&gt;
&lt;/div&gt;
&lt;?php endif; ?&gt;

Notem que utilizando o ‘WP_Query’, as funções ‘have_posts()’ e ‘the_post()’ devem ser precedidas pelo objeto instanciado. Como ‘$noticias’ e ‘$artigos’ do exemplo mostrado acima.

Nesse exemplo eu também adicionei a condicional if para mostrar como alterar a formatação dos posts das diferentes sessões. No programês:

<span style="color: #990000;">&lt;?php $noticias = consulte_posts(&quot;quantidade_de_posts=3 e categoria_de_nome=noticias&quot;); ?&gt;</span>
<span style="color: #990000;">&lt;?php se(houverem_posts_em_noticias()) : ?&gt;</span>
&lt;div class="noticias"&gt;
&lt;?php enquanto(houverem_posts_em_noticias()) : carregue_o_post_da_vez(); ?&gt;
trecho da interface a ser repetido…
&lt;?php verifique_se_ainda_há_posts; ?&gt;
&lt;/div&gt;
<span style="color: #990000;">&lt;?php fim_das_noticias; ?&gt;</span>

O importante é que tenham em mente que as tags abertas entre o ‘if’ e o ‘while’ devem ser fechadas entre o ‘endwhile’ e o ‘endif’, ok.

6 Comments

  • responder

    David

    8 anos atrás

    Muito boa essa dica. Agora como fazer para exibir uma coluna dos post mais recentes em um loop e uma coluna de uma determinada categoria em outro loop sem que os posts não se repitam.

    • responder

      Marcelo Mesquita

      8 anos atrás

      E aê David, mais uma vez, uma boa pergunta que você fez que mereceu mais um post.

      Obrigado pela participação!

  • responder

    Allan

    8 anos atrás

    Marcelo, quem sabe você não possa me ajudar,
    estou precisando fazer um query que seja mais ou menos o seguinte…
    Tenho uma categoria que é pai de outras 5, e preciso pegar o ultimo posto de cada uma das 5.. mas preciso mostrar a ultima de cada uma… alguma ideia de como faze-lo?

    • responder

      Marcelo Mesquita

      8 anos atrás

      Allan,
      seria muito complicado criar um script para a sua query. Eu sugiro criar um WP_Query para cada categoria mesmo.

      Obrigado pela participação!

  • responder

    Evitando posts repetidos » Marcelo Mesquita

    8 anos atrás

    […] Multiplos Loops […]

  • responder

    Julian Leno

    5 anos atrás

    ótimo post! resolveu um problemão que eu estava tendo! a propósito ótimo site… favoritei aqui 😀

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *