Что делает setup_postdata($post)?

15 мая 2013 г., 22:34:13
Просмотры: 25K
Голосов: 19

В документации она определяется как 'Настройка глобальных данных записи. Помогает форматировать результаты пользовательских запросов для использования шаблонных тегов.' Это не очень понятное объяснение.

Вот пример кода:

global $post;
$args = array( 'numberposts' => -1);
$posts = get_posts($args);
foreach( $posts as $post) : setup_postdata($post);
echo $post->ID;
endforeach; 

Поясню подробнее: функция setup_postdata() инициализирует глобальную переменную $post и настраивает все необходимые данные, чтобы стандартные функции WordPress (такие как the_title(), the_content(), the_excerpt() и другие шаблонные теги) работали корректно с текущей записью в цикле. Без этой функции шаблонные теги WordPress не смогут правильно получить информацию о текущей записи при использовании пользовательских запросов.

0
Все ответы на вопрос 1
0
21

Функции тегов шаблонов используют глобальные переменные для доступа к обрабатываемой записи и получения данных из неё или связанных с ней.

Главной переменной среди них является $post, которая содержит сам объект записи.

В вашем примере это не указано явно, но происходит следующее: ваш цикл присваивает данные переменной $post. Если бы её имя было другим, вам пришлось бы указывать его явно (global $post; $post = $some_other_post;).

Однако существует множество других глобальных переменных, и цель функции setup_postdata() — заполнить их данными. Если посмотреть исходный код, это следующие переменные:

global $id, $authordata, $currentday, $currentmonth, $page, $pages, $multipage, $more, $numpages;

Обратите внимание, что в большинстве случаев после этого следует вызывать wp_reset_postdata(), чтобы вернуть глобальные переменные в исходное состояние.

15 мая 2013 г. 22:40:16