Make WordPress Core

Changeset 45285


Ignore:
Timestamp:
05/04/2019 08:59:11 PM (6 years ago)
Author:
azaozz
Message:

Fix setup_postdata() to set the (inside the loop) globals before the_post action is fired. Follow-up from #42814 and [44941].

Props david.binda, spacedmonkey, boonebgorges, birgire, jorbin, azaozz.
Fixes #47114 for trunk.

Location:
trunk
Files:
2 edited

Legend:

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

    r44966 r45285  
    42094209        $numpages     = $elements['numpages'];
    42104210
     4211        /**
     4212         * Fires once the post data has been setup.
     4213         *
     4214         * @since 2.8.0
     4215         * @since 4.1.0 Introduced `$this` parameter.
     4216         *
     4217         * @param WP_Post  $post The Post object (passed by reference).
     4218         * @param WP_Query $this The current Query object (passed by reference).
     4219         */
     4220        do_action_ref_array( 'the_post', array( &$post, &$this ) );
     4221
    42114222        return true;
    42124223    }
     
    42994310        }
    43004311
    4301         /**
    4302          * Fires once the post data has been setup.
    4303          *
    4304          * @since 2.8.0
    4305          * @since 4.1.0 Introduced `$this` parameter.
    4306          *
    4307          * @param WP_Post  $post The Post object (passed by reference).
    4308          * @param WP_Query $this The current Query object (passed by reference).
    4309          */
    4310         do_action_ref_array( 'the_post', array( &$post, &$this ) );
    4311 
    43124312        $elements = compact( 'id', 'authordata', 'currentday', 'currentmonth', 'page', 'pages', 'multipage', 'more', 'numpages' );
    43134313
  • trunk/tests/phpunit/tests/query/setupPostdata.php

    r42343 r45285  
    99
    1010    protected $global_data = array();
     11
     12    protected $pages_global;
    1113
    1214    public function setUp() {
     
    417419    }
    418420
     421    /**
     422     * @ticket 47114
     423     *
     424     * setup_postdata() should set the globals before `the_post` action is fired.
     425     */
     426    public function test_the_post_action() {
     427        $post = self::factory()->post->create_and_get();
     428        add_action( 'the_post', array( $this, 'the_post_action_callback' ) );
     429
     430        setup_postdata( $post );
     431
     432        $this->assertEquals( $GLOBALS['pages'], $this->pages_global );
     433    }
     434
     435    /**
     436     * Helpers
     437     */
     438    public function the_post_action_callback() {
     439        $this->pages_global = $GLOBALS['pages'];
     440    }
    419441}
Note: See TracChangeset for help on using the changeset viewer.