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

13

Кодекс определяет его как «Настройка глобальных почтовых данных. Помогает отформатировать результаты пользовательских запросов для использования тегов Template. ' Я не очень понимаю это.

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

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

Пожалуйста, вы можете объяснить?

mattnewbie
источник

Ответы:

16

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

Основной переменной из них является то, $postчто содержит сам объект post. В вашем примере это не явно, но происходит то, что ваш цикл присваивает данные $post, если имя для итерации не было, $postвам нужно было бы сделать это явно ( global $post; $post = $some_other_post;).

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

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

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

Rarst
источник