¿Qué hace setup_postdata($post)?
El codex lo define como 'Configura los datos globales del post. Ayuda a formatear los resultados de consultas personalizadas para usar Template tags.' No entiendo esto realmente.
Aquí hay un ejemplo de código:
global $post;
$args = array( 'numberposts' => -1);
$posts = get_posts($args);
foreach( $posts as $post) : setup_postdata($post);
echo $post->ID;
endforeach;
¿Podrían explicarlo por favor?

Las funciones de etiquetas de plantilla dependen de variables globales para acceder a la publicación que se está procesando y recuperar datos de ella o relacionados con ella.
La variable principal entre estas es $post
, que contiene el objeto de la publicación en sí.
En tu ejemplo no es explícito, pero lo que está sucediendo es que tu bucle asigna datos a $post
. Si su nombre no fuera $post
, necesitarías nombrarlo explícitamente (global $post; $post = $some_other_post;
).
Sin embargo, hay un montón de otras variables globales y el propósito de setup_postdata()
es llenarlas con datos. Si miras el código fuente, estas son:
global $id, $authordata, $currentday, $currentmonth, $page, $pages, $multipage, $more, $numpages;
Ten en cuenta que en la mayoría de los casos deberías llamar a wp_reset_postdata()
después para devolver las variables globales a su estado original.
