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
Version | Description |
---|---|
1.5.0 | Introduced. |
User Contributed Notes
You must log in before being able to contribute a note or feedback.