rewind_posts () - o que realmente o uso dele, e onde o uso é necessário ou preferido?

4

O Codex sobre isso incompleto, diz muito simplesmente:

  

rewind_posts ():
  Rebobine os posts de loop.

De acordo com este encadeamento WPSE , com resposta Eugene Manuilov , recebi:

<?php
// fetch first post from the loop
the_post();

// get post type
$post_type = get_post_type(); 

// rewind the loop posts
rewind_posts();
?>

Com o tutorial de desenvolvimento de temas de Ian Stewart, encontrei o uso de rewind_posts() em archive.php , category.php , tag.php , author.php :

<?php the_post(); ?>
<!-- echo page title -->
<?php rewind_posts(); ?>
<?php while ( have_posts() ) : the_post(); ?>
   <!-- echo content -->
<?php endwhile; ?>

Mas no tema TwentyThirteen não podemos ver algo assim, mas um simples loop WordPress com condicional:

<?php if ( have_posts() ) : ?>
<!-- echo page title -->
<?php while ( have_posts() ) : the_post(); ?>
   <!-- echo content -->
<?php endwhile; ?>
<?php endif; ?>

Então, eu só quero saber, enquanto eu tenho o loop do WordPress para usar, e que também funciona com paginação, então onde eu preciso REWIND THE LOOP, e por que ?

EDITAR

Ok, após a primeira resposta, recebi um artigo muito bom descrevendo as três funções de redefinição de consulta no WordPress:

  

» 3 maneiras de redefinir o loop do WordPress por Jeff Starr - DigWP.com

Espero que com isso a resposta possa ser muito mais educativa do que a que temos atualmente.

    
por Mayeenul Islam 23.10.2013 / 17:40

2 respostas

4

Geralmente, limpa o loop atual

// main loop
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; endif; ?>

// rewind
<?php rewind_posts(); ?>

// new loop
<?php while (have_posts()) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; ?>

Aqui, ele limpa o loop principal e começa com o novo loop

Referência: enlace

    
por Kishore Sahoo 23.10.2013 / 18:41
1

Na verdade, não é necessário se você usar have_posts() no loop, já que ele é chamado no final do loop na função mencionada:

public function have_posts() {
    if ( $this->current_post + 1 < $this->post_count ) {
        return true;
    } elseif ( $this->current_post + 1 == $this->post_count && $this->post_count > 0 ) {
        /**
         * Fires once the loop has ended.
         *
         * @since 2.0.0
         *
         * @param WP_Query &$this The WP_Query instance (passed by reference).
         */
        do_action_ref_array( 'loop_end', array( &$this ) );
        // Do some cleaning up after the loop
        $this->rewind_posts();
    }

    $this->in_the_loop = false;
    return false;
}
    
por brannigan 13.06.2018 / 10:49

Tags