setup_postdata( WP_Post|object|int $post )

Set up global post data.


Description Description


Parameters Parameters

$post

(WP_Post|object|int) (Required) WP_Post instance or Post ID/object.


Top ↑

Return Return

(bool) True when finished.


Top ↑

Source Source

File: wp-includes/query.php

function setup_postdata( $post ) {
	global $wp_query;

	if ( ! empty( $wp_query ) && $wp_query instanceof WP_Query ) {
		return $wp_query->setup_postdata( $post );
	}

	return false;
}

Top ↑

Changelog Changelog

Changelog
Version Description
4.4.0 Added the ability to pass a post ID to $post.
1.5.0 Introduced.


Top ↑

User Contributed Notes User Contributed Notes

  1. Skip to note content
    Contributed by mslade

    An important note about setup_postdata and the $post global: setup_postdata( $new_post ) sets various globals related to the current post but it does not update the $post global. This disjoint can cause problems both in WP internals and in plugins/themes.

    Therefore if you call setup_postdata( $new_post ), you should also assign it to the global $post object.

  2. Skip to note content
    Contributed by Codex

    Example 1

    <ul>
    	<?php
    	global $post;
    	
    	$myposts = get_posts( array(
    		'posts_per_page' => 5,
    		'offset'         => 1,
    		'category'       => 1
    	) );
    	
    	if ( $myposts ) :
    		foreach ( $myposts as $post ) :
    		  setup_postdata( $post ); ?>
    			<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    		endforeach; 
    		wp_reset_postdata();
    	endif;
    	?>
    </ul>
    
  3. Skip to note content
    Contributed by Codex

    Example 2

    <ul>
    <?php
    global $wpdb, $post;
    
    $str    = "SELECT $wpdb->posts.* FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish'";
    $result = $wpdb->get_results( $str );
    
    if ( $result ) {
    	foreach ( $result as $post ):
    		setup_postdata( $post );
    		?>
    		<li><a href="<?php the_permalink()?>"><?php the_title();?></a></li>
    		<?php 
    	endforeach;
    }
    ?>
    </ul>
    

You must log in before being able to contribute a note or feedback.