Make WordPress Core

Changeset 48114


Ignore:
Timestamp:
06/21/2020 10:34:35 AM (4 years ago)
Author:
SergeyBiryukov
Message:

Posts, Post Types: Avoid a PHP warning when get_the_content() is called outside of the loop.

This ensures that $pages and other globals are only used after they have been set up in setup_postdata().

Follow-up to [44941].

Props tessawatkinsllc, dontdream, spacedmonkey, squarecandy, davidbaumwald, SergeyBiryukov.
Fixes #47824. See #42814.

Location:
trunk
Files:
3 edited

Legend:

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

    r48104 r48114  
    42764276
    42774277        /**
    4278          * Fires once the post data has been setup.
     4278         * Fires once the post data has been set up.
    42794279         *
    42804280         * @since 2.8.0
  • trunk/src/wp-includes/post-template.php

    r48060 r48114  
    283283    }
    284284
    285     if ( null === $post ) {
     285    // Use the globals if the $post parameter was not specified,
     286    // but only after they have been set up in setup_postdata().
     287    if ( null === $post && did_action( 'the_post' ) ) {
    286288        $elements = compact( 'page', 'more', 'preview', 'pages', 'multipage' );
    287289    } else {
  • trunk/tests/phpunit/tests/post/getTheContent.php

    r46586 r48114  
    7676        $this->assertSame( 'Bang', $found );
    7777    }
     78
     79    /**
     80     * @ticket 47824
     81     */
     82    public function test_should_fall_back_to_post_global_outside_of_the_loop() {
     83        $GLOBALS['post'] = self::factory()->post->create( array( 'post_content' => 'Foo' ) );
     84
     85        $this->assertSame( 'Foo', get_the_content() );
     86    }
    7887}
Note: See TracChangeset for help on using the changeset viewer.