• Решено Boolean_Type

    (@boolean_type)


    Здравствуйте!
    В док-тации приведен код:

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

    Не могу понять, зачем здесь rewind_posts()? Ведь метод 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 ) {
        do_action_ref_array( 'loop_end', array( &$this ) );
        $this->rewind_posts(); //перемотка цикла в начало
      }
      $this->in_the_loop = false;
      return false;
    }

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    В данном случае вызов rewind_posts() действительно не нужен и приведён, скорее всего, просто для наглядности.

    Более удачным примером может служить шаблон author.php в стандартных темах — там сначала вызывается the_post() для получения информации об авторе, а затем цикл отматывается на начало, чтобы вывод начинался с первой записи.

    Спасибо большое, понял. 🙂
    Но возник др. вопрос. Вы написали:

    там сначала вызывается the_post()

    Закомментировал вызов этой ф-ции — результат тот же, всё работает. Я не удивлен, т.к. знаю: все глобальные переменные инициализируются функцией wp() ещё до загрузки шаблонов, в т.ч. и $authordata, из кот-го берутся данные об авторе. Иными словами, и без вызова the_post() ф-ция get_the_author() выводит нужного автора.
    Я рассматривал дефолт. тему , в ней необходимость вызова the_post() описана так:

    Queue the first post, that way we know what author we’re dealing with (if that is the case).

    Но ведь в GET — id автора, который обрабатывается в, грубо говоря, ф-ции wp(). Т.е., ещё до подгрузки шаблонов известно, посты какого автора надо показывать.
    Что я упускаю? Разъясните, пожалуйста 🙂

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    все глобальные переменные инициализируются функцией wp() ещё до загрузки шаблонов, в т.ч. и $authordata, из кот-го берутся данные об авторе. Иными словами, и без вызова the_post() ф-ция get_the_author() выводит нужного автора.

    Это стало возможным только в версии 3.7, а Twenty Fourteen совместима также с WordPress 3.6, т.е. просто так убрать the_post() нельзя. Можно добавить проверку версии, но это усложнило бы код без видимой пользы.

    В Twenty Fifteen отдельного вызова the_post() уже нет, там имя автора в архиве выводится новой функцией the_archive_title().

    Благодарю за столь доступные ответы!

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Тема «Необходимость rewind_posts()» закрыта для новых ответов.