Suporte » Temas » Melhor maneira de configurar o loop.php

  • Olá,

    Sempre desenvolvi temas com um loop individual em cada arquivo (category.php, archive.php, search.php, etc.). Pela primeira vez estou pensando em utilizar a função <?php get_template_part( 'loop', 'index' ); ?> a fim de organizar melhor o código.

    Para chamar apenas um loop padrão é tranquilo. O problema é quando preciso chamar diferentes loops para cada página. Num primeiro momento pensei em utilizar as Conditional Tags, mas não tenho ideia de como proceder.

    Penso em um loop da seguinte forma:

    http://pastebin.com/VAyBxHS0

    <?php if ( ! is_single() ) {?>
    
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <!--Conteúdo do loop para single-->
    <?php endwhile; else: ?>
    <p><?php _e('Desculpe, nenhuma postagem para estes critérios.'); ?></p>
    <?php endif; ?>
    
    <?php }?>
    
    <?php if ( ! is_category() ) {?>
    
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <!--Conteúdo do loop pra categoria-->
    <?php endwhile; else: ?>
    <p><?php _e('Desculpe, nenhuma postagem para estes critérios.'); ?></p>
    <?php endif; ?>
    
    <?php }?>

    E assim por diante, com is_archive, is_page, etc. Funcionou. Mas seria esta a melhor maneira de organizar o loop.php?

    Obrigado!

Visualizando 5 respostas - 1 até 5 (de um total de 5)
  • Por que você não se baseia no loop do Twentyten?

    Criador do tópico brightweb1

    (@brightweb1)

    Acho muito grande. Tem muitas funções desnecessárias.

    Olá,

    O loop.php do Twenty Ten é grande porque cobre todos os contextos de maneira explicativa. É claro que pode criar o próprio loop de modo bem simples.

    Outro recurso interessante é a criação de funções para exibir dados do post.

    Por exemplo, criar uma função para mostrar data, autor, categoria etc dentro de cada post, mas com condicionais, assim, em listas de arquivo não mostrar tags, em listas de procura só mostrar data etc, somente chamando a mesma função em todo o loop.

    Sobre condicionais, veja Conditional Tags.

    No seu código, você está repetindo a função do loop, não precisa fazer isso, faça a verificação após iniciá-lo, veja se isto funciona (não testei):

    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    		<!--Conteúdo do loop para single-->
    		<?php if (is_single() ) {?>
    		<?php the_title(); ?>
    		<?php the_content(); ?>
    		<?php }?>
    
    		<!--Conteúdo do loop para archive-->
    		<?php if (is_archive() ) {?>
    		<?php the_title(); ?>
    		<?php }?>
    
    		<!--Conteúdo do loop para archive de tags-->
    		<?php if (is_tag() ) {?>
    		<?php the_title(); ?>
    		<?php }?>
    
    		<!--Conteúdo do loop para archive de uma tag em especial
    		<?php if (is_tag('vertebrados')) {?>
    		<?php the_title(); ?>
    		<?php }?>		
    
    <?php endwhile; else: ?>
    <p>Nada encontrado</p>
    <?php endif; ?>
    
    <?php }?>
    Criador do tópico brightweb1

    (@brightweb1)

    Certo, Diana.

    Realmente, não há necessidade de repetir a funcação loop. Muito obrigado pela atenção. Porém, fiquei na dúvida de como fazer para por o <?php endwhile; else: ?> ser diferente em cada um dos casos. Por exemplo: Se for archive -> mostrar conteúdo do loop para archive. Se nada for encontrado, mostrar “Nenhum arquivo encontrado”. Se for categoria -> mostrar conteúdo do loop para categoria. Se nada for encontrado, mostrar “Nenhuma categoria encontrada”.

    Estude os arquivos do Twenty Ten loop.php e loop-single.php, eles são grandes mas se pode observar como cada teste é feito.

    Outra coisa: mesmo que tenha loop unificado, poderá criar loops separados nos arquivos de contexto, não é uma obrigação usar o arquivo com o loop unificado.

    Veja este tópico com algumas dicas.

Visualizando 5 respostas - 1 até 5 (de um total de 5)
  • O tópico ‘Melhor maneira de configurar o loop.php’ está fechado para novas respostas.