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();, то мы переходим к какому посту? Уж не второму ли?

Миша

В последние годы я долго не знал, что мне делать с сайтом misha.blog, ведь он практически не приносит никакого профита, но недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.

Оставить комментарий

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, если же код – меньше одной строчки, то можно и в <code></code>.