The codex defines it as 'Set up global post data. Helps to format custom query results for using Template tags.' I don't really understand this.

Here is a code example :

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

Please can you explain?

up vote 14 down vote accepted

Template tag functions rely on global variables to access post being processed and retrieve data from it or related to it.

Main variable of them is $post which holds post object itself. In your example it's not explicit, but what is happening is that your loop assigns data to $post, if name for iteration wasn't $post you would need to do that explicitly (global $post; $post = $some_other_post;).

However there is bunch of other globals and purpose of setup_postdata() is to fill them in with data. If you look at source namely they are:

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

Note that in most cases you should be calling wp_reset_postdata() afterwards to return globals to their original state.

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.