web-dev-qa-db-ja.com

rewind_posts() - 実際には何を使うのか

不完全な これに関するコーデックス 、非常に簡単に言う:

rewind_posts():
ループポストを巻き戻します。

このWPSEスレッドEugene Manuilov の答えで、私は次のようになりました。

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

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

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

Ian Stewartのテーマ開発チュートリアルで、rewind_posts()archive.phpcategory.phptag.phpauthor.phpで使用されていることがわかりました。

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

しかしTwentyThirteenのテーマでは、このようなものは見られませんが、条件付きの単純なWordPressループです。

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

それで、私はちょうどWordPressループを使うべきだ、そしてそれがページネーションでも動作している間、知りたいだけです、そしてwhereループを巻き戻す必要があります、そしてwhy

編集

さて、最初の答えの後、私はWordPressの3つのクエリリセット機能を説明している非常に良い記事を得ました:

"ワードプレスループをリセットする3つの方法 by Jeff Starr - DigWP.com

この答えが、私たちが現在得ているものよりはるかに教育的になることを願っています。

4
Mayeenul Islam

それは一般的に現在のループをクリアします

// 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; ?>

ここでそれはメインループをクリアして新しいループから始めます

参照: http://codex.wordpress.org/Function_Reference/rewind_posts

4
Kishore Sahoo

ループ内でhave_posts()が使用されている場合は、実際には 必要ではありません 上記の関数ではループの最後で呼び出されます。

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;
}
1
brannigan