WordPress.org

Make WordPress Core

Changeset 25601


Ignore:
Timestamp:
09/24/2013 03:52:41 PM (7 years ago)
Author:
nacin
Message:

Introduce a reset_postdata() method on the WP_Query object, which wp_reset_postdata() now wraps.

props ericlewis.
fixes #24785.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/query.php

    r25312 r25601  
    109109/**
    110110 * After looping through a separate query, this function restores
    111  * the $post global to the current post in the main query
     111 * the $post global to the current post in the main query.
    112112 *
    113113 * @since 3.0.0
     
    116116function wp_reset_postdata() {
    117117    global $wp_query;
    118     if ( !empty($wp_query->post) ) {
    119         $GLOBALS['post'] = $wp_query->post;
    120         setup_postdata($wp_query->post);
    121     }
     118    $wp_query->reset_postdata();
    122119}
    123120
     
    36293626        return $wp_the_query === $this;
    36303627    }
     3628
     3629    /**
     3630     * After looping through a nested query, this function
     3631     * restores the $post global to the current post in this query.
     3632     *
     3633     * @since 3.7.0
     3634     *
     3635     * @return bool
     3636     */
     3637    function reset_postdata() {
     3638        if ( ! empty( $this->post ) ) {
     3639            $GLOBALS['post'] = $this->post;
     3640            setup_postdata( $this->post );
     3641        }
     3642    }
    36313643}
    36323644
  • trunk/tests/phpunit/tests/query.php

    r25002 r25601  
    5858        }
    5959    }
     60
     61    /**
     62     * @ticket 24785
     63     *
     64     */
     65    function test_nested_loop_reset_postdata() {
     66        $post_id = $this->factory->post->create();
     67        $nested_post_id = $this->factory->post->create();
     68
     69        $first_query = new WP_Query( array( 'post__in' => array( $post_id ) ) );
     70        while ( $first_query->have_posts() ) { $first_query->the_post();
     71            $second_query = new WP_Query( array( 'post__in' => array( $nested_post_id ) ) );
     72            while ( $second_query->have_posts() ) {
     73                $second_query->the_post();
     74                $this->assertEquals( get_the_ID(), $nested_post_id );
     75            }
     76            $first_query->reset_postdata();
     77            $this->assertEquals( get_the_ID(), $post_id );
     78        }
     79
     80    }
    6081}
Note: See TracChangeset for help on using the changeset viewer.