Сложно объяснить всё то, что происходит внутри этой функции, поэтому попробую на примерах.
Прежде всего – у функции нет параметров, и работает она с глобальными переменными. Нужна только для основного цикла WordPress!
1. Увеличивает индекс значения текущего поста
Другими словами – переходит к следующему посту цикла.
Как я уже упомянул ранее, функция have_posts() будет возвращать true
до тех пор, пока мы не дошли до последнего поста цикла. И как нам до него дойти, если не при помощи the_post()
?
while( have_posts() ) { the_post(); // переходит к следующему посту в цикле the_title(); }
Если в этом примере закомментировать 3-ю строчку, то мы получаем бесконечный цикл, в котором будут выводиться заголовки одного и того же поста (первого).
2. Обновляет значение глобальной переменной $post
Переопределяет некоторые глобальные переменные благодаря чему, у нас начинают нормально работать такие функции, как the_content(), get_the_content().
Распространённые ошибки
Что делать, если выводится заголовок, но не выводится контент внутри записи/страницы?
Предположим, внутри single.php
вы используете такой код:
<h1><?php the_title() ?></h1> <?php the_content() ?>
Заголовок поста выводится на ура, но вместо содержимого поста – пустота…
Этот пример как раз отлично описывает ситуацию с пропущенной the_post()
в начале.
Потерялся первый пост в архивах рубрики / метки / поиске
Очень часто бывает, что файлы шаблонов конкретной записи single.php
или страницы page.php
начинаются с этой строчки:
get_header(); the_post();
И иногда вордпрессеры так увлекаются, что копируют всю эту строку при создании шаблонов главной страницы, рубрик, поиска и так далее.
В итоге получается, что функция the_post();
в начале файла уже перешла к первому посту цикла, а потом, когда мы ещё раз закидываем её в while( have_posts() ) : the_post();
, то мы переходим к какому посту? Уж не второму ли?
Источник: misha.blog