Make WordPress Core

Changeset 48114


Ignore:
Timestamp:
06/21/2020 10:34:35 AM (6 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.