WP_Query::the_post()

In this article

Sets up the current post.

Description

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

Source

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 );
}

Hooks

do_action_ref_array( ‘loop_start’, WP_Query $query )

Fires once the loop is started.

Changelog

VersionDescription
1.5.0Introduced.

User Contributed Notes

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