Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress
Code

Como codificar multiplos loops usando apenas uma consulta no banco de dados

by
Difficulty:IntermediateLength:MediumLanguages:

Portuguese (Português) translation by Cândido Sales Gomes (you can also view the original English article)

Eu sou um grande fã da classe WP_Query: Eu uso em muitos sites de meus clientes para consultar e customizar a saída de diversos modos.

Se você  quer executar múltiplos loops em uma página, a maneira mais fácil de fazer isso é executar WP_Query cada vez que você precisa executar um loop. Mas existe uma desvantagem: cada vez que o WordPress executa uma consulta, ele envia uma requisição para o banco de dados, que leva tempo e pode atrasar seu site; E se você está usando WP_Query ao invés da consulta principal para saída de conteúdo, então ele faz uma consulta principal redundante, que é uma perca de recursos.

Então aqui vou apresentar como usar uma consulta para executar mais de um loop. Você pode fazer isso com a consulta principal (que é isso que vou fazer, como é mais eficiente) ou você pode usar a mesma técnica com WP_Query

Há três partes para isto:

  • Crie um tema filho e arquivo de template.
  • Crie uma parte do template para o loop de conteúdo.
  • Crie nossos loops.

Então vamos começar!

O que você vai precisar

Para acompanhar, você precisará de:

  • Uma instalação de desenvolvimento do WordPress.
  • Um editor de código.
  • Posts em seu site atribuídas com múltiplas categorias - Eu estou usando o tema de dados de teste para Wordpress.
  • O tema de twenty sixteen instalado em seu site.
  • Um tema filho do twenty sixteen instalado e ativado - Vou cobrir brevemente a configuração do tema filho aqui.

Você não tem que estar usando twenty sixteen com um tema filho — você pode adaptar esta técnica para o seu próprio tema. Mas eu vou estar usando um filho de twenty sixteen.

Criando um Tema Filho

Primeiro vamos criar o tema filho de twenty sixteen. Eu estou fazendo isso por que eu não quero editar o próprio twenty sixteen.

No seu diretório wp-content/theme, crie uma nova pasta vazia. Estou chamando a minha de tutsplus-one-query-two-loops

Na pasta, crie um arquivo chamado style.css e adicione isso:

Agora salve o arquivo e ative seu novo tema.

O próximo passo é criar um arquivo de template para categorias, que é o que nós vamos estar trabalhando.

Faça uma cópia do arquivo archive.php do twenty sixteen em seu novo tema.  Não mova ele, mas copie. Renomei para category.php. Este é o novo arquivo de template para categorias em seu site.

Criando uma Nova Parte do Arquivo de Template

O primeiro passo para definir a nova parte do arquivo de template em nosso tema que irá conter uma versão editada do loop do twenty sixteen.

Em sua pasta do tema, crie uma subpasta chamada includes. Dentro dela, crie um novo arquivo chamado loop-category.php.

Agora abra o arquivo template-parts/content.php do arquivo do twenty sixteen e encontre este código (que é a maior parte do arquivo)

Copie isso para seu novo arquivo.

Editando a Parte do Template

O loop do twenty sixteen apresenta mais do que eu preciso para este arquivo, então vou editá-lo. Eu apenas quero apresentar o resumo e não o conteúdo, então eu vou removê-lo.

Em seu novo arquivo loop-category.php, encontre este código e delete.

O outro passo é substituir a função twenty_sixteen_excerpt() com a função padrão the_excerpt(), como a versão twenty sixteen não inclui o link para post completo.

Encontre essa linha:

Substitua com isso:

Nós também precisamos fazer alguns ajustes para as tags do título.

Na parte do template, edite a linha:

Mude as tags h2 para h3:

Salve sua parte do template. Agora vamos voltar para seu arquivo category.php e continuar trabalhando nele.

Criando Nossos Loops

Primeiro vamos remover a chamada para a parte do twenty sixteen de nosso arquivo category.php, como nós vamos precisar usar o novo arquivo em seu lugar.

Em seu arquivo category.php encontre este código:

Exclua isso.

Agora nós vamos criar os loops.

Neste exemplo eu vou listar todos os post com o tag 'content' primeiro, usando a condicional has_tag().

Isso significa que vou ter que executar três loops.

  • Primeiro verifique se a consulta tem retornado qualquer post com essa tag.
  • Se for assim, a saída do segundo post com essa tag.
  • A terceira saída dos post sem essa tag.

Entre cada um deles, eu vou usar rewind_posts() para rebobinar os posts sem redefinir a consulta: nós estamos ainda trabalhando com uma consulta principal a cada vez.

O Primeiro Loop: Verificando os Posts

Em seu arquivo category.php, encontre o início do loop.

Acima da linha, defina a nova variável chamada $count:

Agora dentro do loop, adicione esse código:

Isso verifica se o post tem a tag 'content' e então adiciona 1 para o contador em caso afirmativo.

Seu loop vai parecer como esse:

O Segundo Loop: Produzir Posts Com a Tag

O próximo passo é executar um loop para saída dos posts com essa tag, mas somente se existir, i.e. se o valor de $count é maior que 0.

Adicione isso abaixo do seu primeiro loop:

Isso verifica se $count é maior que zero e em caso afirmativo, rebobina os posts e executa o loop novamente.  Para cada post verifica se o post tem nossa tag e, em caso afirmativo, chama a parte do template que criamos.

O Terceito Loop: Produzir o Resto de Nossos Posts

O loop final irá apresentar os post restantes. Se essa categoria não tiver qualquer post com a tag 'content', então irá apresentar todos os posts na categoria.

Abaixo de seu segundo loop, adicione isso:

Isso rebobina os posts (que você estará fazendo para a primeira vez, se não houvesse qualquer post com a tag ou a segunda vez se havia), e então executa o loop de novo. Dessa vez verifica se o post não tem a tag 'content' e então se produz usando nossa parte do template.

O Arquivo Finalizado

Agora teste a página de categoria arquivo em seu site.

Se você está usando o dado de teste do Wordpress como eu, você vai descobrir que a categoria 'Markup' tem posts com a tag 'content'. Aqui é a página de categoria arquivo para a categoria 'Markup' em meu site:

The category page with two loops

Resumo

Executando múltiplos loops de uma consulta não é complicado. Ao invés de redefinir a consulta e criando uma nova, você usa a função rewind_posts() para rebobinar a consulta e executar novamente. E ao invés de definindo novos parâmetros de consulta, você usa tags condicionais para especificar quais posts serão produzidos.

Nota importante: Não fique tentado a usar query_posts() para alterar a consulta principal quando você está fazendo isso. Isto vai atrasar seu site mais do que se você tivesse usado várias consultas.

Neste exemplo nós executamos dois loops baseados na consulta principal, que salva usando WP_Query para executar duas consultas adicionais e vai reduzir a carga do servidor. Você pode aplicar essa técnica com uma consulta, você define usando WP_Query ou com a consulta principal em outras páginas de arquivos, editando o template de arquivo apropriado.

Seja o primeiro a saber sobre novas traduções–siga @tutsplus_pt no Twitter!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.