the_post() – переходит к следующему посту цикла и определяет его глобальные переменные

Циклы – не самая лёгкая для понимания тема в изучении WordPress, поэтому возможно вам будет легче изучить её при помощи моего видеоурока.

Сложно объяснить всё то, что происходит внутри этой функции, поэтому попробую на примерах.

Прежде всего – у функции нет параметров, и работает она с глобальными переменными. Нужна только для основного цикла 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();, то мы переходим к какому посту? Уж не второму ли?

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.

Миша Рудрастых и WordPress

Полезности из мира WordPress и жизни студии.

Мой телеграм-канал