Suporte » Desenvolvendo com WordPress » Função do arquivo loop.php?

  • Olá pessoal tenho desenvolvidos vários temas em wp, e sempre uso a mesma técnica ao desenvolver meus temas, mas percebi que alguns temas que a ente baixa tem uma página chamada loop. Qual a função delá? e com se deve usar corretamente query_post em uma tema, quando se precisa chamar várias categorias diferentes dentro de uma página?

Visualizando 5 respostas - 1 até 5 (de um total de 5)
  • A função do loop.php é apenas gerenciar uma porção idêntica de código para ser usada por vários outros arquivos. Não precisa usar necessariamente esse nome (alguns temas usam content.php, por exemplo), como você pode ver aqui na documentação da função get_template_part(), responsável por chamar esses pequenos arquivos.

    Criador do tópico Isaac Borges

    (@isaac-borges)

    Então vamos por parte, a minha questão é, Saber como posso fazer uma query de maneira correta, até agora eu sempre uso query_post, nos temas como mostra o exemplo abaixo:

    <div id="page_conteudo">
     <?php if (have_posts()): while (have_posts()) : the_post();?>
      <?php query_posts('showposts=1&category_name=banner1&offset=0');?>
      <h1 class="titulo"><?php the_title();?></h1>
       <?php the_content();?>
       <?php endwhile; else:?>
       <?php endif;?>
     </div><!-- fim da the contente-->

    E vou repetindo esta tarefa para cada parte do tema mudando apenas as categorias e o limit

    Mas ouvi falar que este modo está errado, que a maneira correta não é essa, pois não posso usar mais de uma query_post no tema:

    Então fiz assim, fiz uma chamada deste jeito e as demais seguindo um outro padrão:

    <div id="banner_central"><!-- inicio da banner central-->
    
    <ul>
      <?php
         global $post;
    
         $args = array( 'showposts' => 1, 'offset'=> 1, 'category_name' => 'banner1', 'offset' => '0');
         $posts = get_posts( $args );
    
      foreach( $posts as $post ) :	setup_postdata($post); ?>
    
    <li><?php the_content(); ?></li>
      <?php endforeach; ?>
    </ul>
    </div><!-- fim da banner central-->

    No entanto, analisando o desenpenho do site com este novo padrão, não percebi nada de diferente quanto a maenira antiga, assim fiquei na dúvida, por isso que pensei que tinha algo com o arquivo loop.php, afinal, qual está correta? ou são duas formas de se fazer a mesma coisa?

    Sim, são formas diferentes de fazer a mesma coisa. No entanto, quanto você usa o query_posts da forma como está usando, você mexe na query principal da página e muda suas variáveis globais, e os resultados podem ser inesperados. A dica é começar a criar um novo objeto WP_Query para assim fazer as suas buscas com mais tranquilidade. Seguindo um dos seus exemplos, o código ficaria assim:

    <div id="banner_central"><!-- inicio da banner central-->
    
        <ul>
          <?php
    
            $args = array( 'showposts' => 1, 'offset'=> 1, 'category_name' => 'banner1', 'offset' => '0');
            $banners = new WP_Query( $args );
    
            if ( $banners->have_posts() ) : while ( $banners->have_posts() ) : $banners->the_post(); ?>
    
                <li><?php the_content(); ?></li>
    
            endwhile; endif;
    
            ?>
        </ul>
    
    </div><!-- fim da banner central-->

    Sobre a diferença entre as queries, há um post legal no Stack Exchange. Pra saber mais sobre a WP_Query, dê uma olhada na documentação da classe!

    Qualquer coisa, só gritar.

    Criador do tópico Isaac Borges

    (@isaac-borges)

    Certo, outra coisa, posso usar mais de uma vez o exemplo que vc me mandou? porque acho que ficou bem legal, isso, só mais uma pergunta, a forma que eu escolher para montar a query, pode influenciar no tempo de carregamento do site?

    Pode usar mais de uma vez sim, Isaac, sem problemas. E sim, pode influenciar no tempo de carregamento, caso você não otimize a forma como as cria. Um exemplo: você poderia querer mostrar 3 posts, mas o primeiro teria uma estrutura HTML totalmente diferente dos dois seguintes. Algumas pessoas fariam duas queries, uma pra mostrar o primeiro post (um destaque, talvez) e a outra para mostrar os dois restantes. Isso não é necessário, já que com a ajuda do PHP é possível fazer apenas uma busca no banco e então tratar diferentemente cada post, se assim for necessário.

    Você pode usar a função get_num_queries() para ver a quantidade de consultas sendo feitas e aproveitar pra ver em quanto tempo seu site está carregando.

Visualizando 5 respostas - 1 até 5 (de um total de 5)
  • O tópico ‘Função do arquivo loop.php?’ está fechado para novas respostas.