WP_Query::the_postpublicWP 1.5.0

Sets up the current post.

Retrieves the next post, sets up the post, sets the 'in the loop' property to true.

Method of the class: WP_Query{}

Hooks from the method

Returns

null. Nothing (null).

Usage

global $wp_query;
$wp_query->the_post();

Notes

  • Global. WP_Post. $post Global post object.

Changelog

Since 1.5.0 Introduced.

WP_Query::the_post() code WP 6.8.1

public function the_post() {
	global $post;

	if ( ! $this->in_the_loop ) {
		if ( 'all' === $this->query_vars['fields'] ) {
			// Full post objects queried.
			$post_objects = $this->posts;
		} else {
			if ( 'ids' === $this->query_vars['fields'] ) {
				// Post IDs queried.
				$post_ids = $this->posts;
			} else {
				// Only partial objects queried, need to prime the cache for the loop.
				$post_ids = array_reduce(
					$this->posts,
					function ( $carry, $post ) {
						if ( isset( $post->ID ) ) {
							$carry[] = $post->ID;
						}

						return $carry;
					},
					array()
				);
			}
			_prime_post_caches( $post_ids, $this->query_vars['update_post_term_cache'], $this->query_vars['update_post_meta_cache'] );
			$post_objects = array_map( 'get_post', $post_ids );
		}
		update_post_author_caches( $post_objects );
	}

	$this->in_the_loop = true;
	$this->before_loop = false;

	if ( -1 === $this->current_post ) { // Loop has just started.
		/**
		 * Fires once the loop is started.
		 *
		 * @since 2.0.0
		 *
		 * @param WP_Query $query The WP_Query instance (passed by reference).
		 */
		do_action_ref_array( 'loop_start', array( &$this ) );
	}

	$post = $this->next_post();

	// Ensure a full post object is available.
	if ( 'all' !== $this->query_vars['fields'] ) {
		if ( 'ids' === $this->query_vars['fields'] ) {
			// Post IDs queried.
			$post = get_post( $post );
		} elseif ( isset( $post->ID ) ) {
			/*
			 * Partial objecct queried.
			 *
			 * The post object was queried with a partial set of
			 * fields, populate the entire object for the loop.
			 */
			$post = get_post( $post->ID );
		}
	}

	// Set up the global post object for the loop.
	$this->setup_postdata( $post );
}