Suporte » Desenvolvendo com WordPress » Ajuda com Loop, pra que alguns itens nao repitam

  • Olá preciso de ajuda com um loop de post type, dentro do loop preciso que algumas divs não se repitam

    Exemplo:

    <?php    $videos = new WP_Query( 
                                    array(
                                        'post_type' => 'videos',
                                        'posts_per_page' => 7
                                    )
                                );
               
                while( $videos->have_posts() ) : $videos->the_post(); ?> 
                
                <div class="repete"></div> 
    <!--            PRECISO QUE ESSA DIV NAO REPITA NO LOOP     -->
                <div class="naorepetir"></div>
    <!--           /PRECISO QUE ESSA DIV NAO REPITA NO LOOP     -->
                
                <div class="repete-2"></div>         
     <?php endwhile; ?>  

    Eu tenho feito 2 loops, existe alguma forma pra nao precisar usar 2 loops
    Exemplo do que fiz:

    <?php    $videos = new WP_Query( 
                                    array(
                                        'post_type' => 'videos',
                                        'posts_per_page' => 7
                                    )
                                );
               
                while( $videos->have_posts() ) : $videos->the_post(); ?> 
                
                <div class="repete"></div> 
                 <?php endwhile; ?>  
                 
    <!--            PRECISO QUE ESSA DIV NAO REPITA NO LOOP     -->
                <div class="naorepetir"></div>
    <!--           /PRECISO QUE ESSA DIV NAO REPITA NO LOOP     -->
                
                <?php    $videos = new WP_Query( 
                                    array(
                                        'post_type' => 'videos',
                                        'posts_per_page' => 7
                                    )
                                );
               
                while( $videos->have_posts() ) : $videos->the_post(); ?> 
                <div class="repete-2"></div>         
     <?php endwhile; ?>  

    Se alguém puder me dar uma dica, desde ja agradeço!

Visualizando 4 respostas - 1 até 4 (de um total de 4)
  • Moderador Ramon

    (@rahmohn)

    Olá, @rtcadmin.

    A forma mais simples seria usar uma “flag”, que nada mais é que uma variável que será verificada. Por exemplo, no código abaixo é a variável $i:

    $i = 0;
    
    $videos = new WP_Query( 
        array(
               'post_type' => 'videos',
               'posts_per_page' => 7
        )
    );
    
    while( $videos->have_posts() ) : $videos->the_post(); ?>
    
    <div class="repete"></div>
    <?php 
     if ( 0 === $i ) { 
    ?>
       <div class="naorepetir"></div>
    <?php
       $i = 1;
     }
    ?>
    
    <div class="repete"></div>
    
    <?php endwhile; ?>
    
    • Esta resposta foi modificada 2 anos, 9 meses atrás por Ramon.

    Olá @rahmohn
    Não funcionou, ele faz o loop do primeiro só uma vez, mas preciso que ele faça loop todas as vezes.
    Oque preciso que nao repita seria as divs
    Preciso que o loop pule essa parte e continue com a de baixo

    	</div>
    	</div>
    	<div class="rvs-nav-container">
    		<a class="rvs-nav-prev"></a>
    		<div class="rvs-nav-stage">
    <div class="rvs-container rvs-horizontal rvs-red-highlight rvs-plain-arrow-play rvs-hide-credits rvs-use-viewport">
    <div class="rvs-item-container">
    <div class="rvs-item-stage">
        
    		<?php    $videos = new WP_Query( 
                                    array(
                                        'post_type' => 'videos',
                                        'posts_per_page' => 7
                                    )
                                );
               $i = 0;
                while( $videos->have_posts() ) : $videos->the_post(); ?>
    			
    			<div class="rvs-item" style="background-image: url(https://i.ytimg.com/vi/<?php the_field( 'link_do_youtube' ); ?>/maxresdefault.jpg)">
    				<p class="rvs-item-text"><?php the_title(); ?></p>
    				<a href="https://www.youtube.com/watch?v=<?php the_field( 'link_do_youtube' ); ?>" class="rvs-play-video"></a>
    			</div>
    			
    			
    			
    			
    			  
    <?php  if ( 0 === $i ) { ?>
        
    			
    			
    		</div>
    	</div>
    	<div class="rvs-nav-container">
    		<a class="rvs-nav-prev"></a>
    		<div class="rvs-nav-stage">
    		
    	<?php   $i = 1; } ?>	
    			
    		
    		
    		
    	
    			<a class="rvs-nav-item">
    				<span class="rvs-nav-item-thumb" style="background-image: url(https://i.ytimg.com/vi/<?php the_field( 'link_do_youtube' ); ?>/default.jpg)"></span>
    				<h4 class="rvs-nav-item-title"><?php the_title(); ?></h4>
    				<small class="rvs-nav-item-credits"></small>
    			</a>
    			
    			<?php endwhile; ?> 
    	
    		</div>
    		<a class="rvs-nav-next"></a>
    	</div>
    </div>  
    Moderador Ramon

    (@rahmohn)

    @rtcadmin

    Para facilitar a não poluir muito o código, vamos testar algo mais simples. Veja o código abaixo.

    <?php
      $i = 0;
      $repetir_uma_vez = 0;
    
      while( $i < 3 ) {
        echo "--- início do loop i = " . $i . " ---<br/>";
        echo "imprime todas as vezes" . "<br/>";
    
        if ( 0 === $repetir_uma_vez ) {
          echo "imprime só uma vez no primeiro loop" . "<br/>";
          $repetir_uma_vez = 1;
        }
    
        echo "imprime todas as vezes" . "<br/>";
        echo "--- fim do loop ---" . "<br/><br/>";
        $i++;
     } 
    

    A saída desse código será:

    — início do loop i = 0 —
    imprime todas as vezes
    imprime só uma vez no primeiro loop
    imprime todas as vezes
    — fim do loop —

    — início do loop i = 1 —
    imprime todas as vezes
    imprime todas as vezes
    — fim do loop —

    — início do loop i = 2 —
    imprime todas as vezes
    imprime todas as vezes
    — fim do loop —

    Apenas no primeiro loop é que impresso o “imprime só uma vez no primeiro loop”. É esse comportamento que você deseja?

    Olá @rahmohn
    É quase isso mesmo que preciso.
    Mas sou leigo e não sei usar isso no loop do wordpress.

    Vou tentar explicar melhor, talvez tenha alguma forma mais facil.
    Tenho umas divs abertas antes do loop que precisam se fechar no meio do loop.
    Exemplo:

    <div id=”container”>
    <div id=”fecha”>

    <?php // Aqui está o loop do wordpress que se repete 3 veses ?>
    <div id=”1″></div>
    <div id=”2″></div>
    <div id=”3″></div>

    <?php // Preciso que essa div seja fechada uma unica vez ?>

    </div><!– /.Fecha –>

    <?php // depois que a div fechar o loop repita novamente mas sera exibida de outra forma ?>

    <div id=”1″ class=”um”></div>
    <div id=”2″ class=”um”></div>
    <div id=”3″ class=”um”></div>

    <?php //fim do loop ?>
    </div>’

    Obs: Eu fiz com 2 loops, encerrei o primeiro fechei as divs, e fiz outro loop.
    Desta forma funciona, mas fica 2 loops, queria um meio pra usar um só.

Visualizando 4 respostas - 1 até 4 (de um total de 4)
  • O tópico ‘Ajuda com Loop, pra que alguns itens nao repitam’ está fechado para novas respostas.