O que setup_postdata ($ post) faz?

13

O codex define como 'Configurar dados globais de postagem. Ajuda a formatar resultados de consultas personalizadas para usar tags de modelo. ' Eu realmente não entendo isso.

Aqui está um exemplo de código:

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

Por favor, você pode explicar?

mattnewbie
fonte

Respostas:

16

As funções de tag de modelo dependem de variáveis ​​globais para acessar a postagem sendo processada e recuperar dados a partir dela ou relacionados a ela.

A principal variável deles é a $postque contém o próprio objeto post. No seu exemplo, não é explícito, mas o que está acontecendo é que seu loop atribui dados $post, se o nome da iteração não fosse, $postvocê precisaria fazer isso explicitamente ( global $post; $post = $some_other_post;).

No entanto, existem muitas outras globais e o objetivo setup_postdata()é preenchê-las com dados. Se você olhar para a fonte, eles são:

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

Observe que, na maioria dos casos, você deve ligar wp_reset_postdata()posteriormente para retornar os globais ao seu estado original.

Rarst
fonte