From 142fefb269107619dff3cfa0d47f42411af46189 Mon Sep 17 00:00:00 2001 From: Joe McGill Date: Mon, 29 Aug 2016 12:24:09 +0000 Subject: [PATCH] Post Thumbnails: Prevent post thumbnail previews from spilling into other images. After [38118], when previewing a page with a secondary loop, all post thumbnails would be filtered to display the post thumbnail for the page being previewed. This ensures `_wp_preview_post_thumbnail_filter()` is only applied if the `$post_id` of the post meta being filtered is equal to the post or page being previewed. Props swisspidy, joemcgill. Fixes #37697. git-svn-id: https://develop.svn.wordpress.org/trunk@38433 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/revision.php | 8 +++++- tests/phpunit/tests/post/thumbnails.php | 37 +++++++++++++++++++++---- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/src/wp-includes/revision.php b/src/wp-includes/revision.php index b588621944..07a986c003 100644 --- a/src/wp-includes/revision.php +++ b/src/wp-includes/revision.php @@ -594,7 +594,13 @@ function _wp_preview_post_thumbnail_filter( $value, $post_id, $meta_key ) { return $value; } - if ( empty( $_REQUEST['_thumbnail_id'] ) || $post->ID != $post_id || '_thumbnail_id' != $meta_key || 'revision' == $post->post_type ) { + if ( empty( $_REQUEST['_thumbnail_id'] ) || + empty( $_REQUEST['preview_id'] ) || + $post->ID != $post_id || + '_thumbnail_id' != $meta_key || + 'revision' == $post->post_type || + $post_id != $_REQUEST['preview_id'] + ) { return $value; } diff --git a/tests/phpunit/tests/post/thumbnails.php b/tests/phpunit/tests/post/thumbnails.php index f3ebeeb3d7..cc3c183f55 100644 --- a/tests/phpunit/tests/post/thumbnails.php +++ b/tests/phpunit/tests/post/thumbnails.php @@ -237,16 +237,41 @@ class Tests_Post_Thumbnail_Template extends WP_UnitTestCase { $GLOBALS['post'] = self::$post; $_REQUEST['_thumbnail_id'] = self::$attachment_id; + $_REQUEST['preview_id'] = self::$post->ID; $result = _wp_preview_post_thumbnail_filter( '', self::$post->ID, '_thumbnail_id' ); - $this->assertEquals( self::$attachment_id, $result ); + // Clean up. + $GLOBALS['post'] = $old_post; unset( $_REQUEST['_thumbnail_id'] ); - if ( null === $old_post ) { - unset( $GLOBALS['post'] ); - } else { - $GLOBALS['post'] = $old_post; - } + unset( $_REQUEST['preview_id'] ); + + $this->assertEquals( self::$attachment_id, $result ); + } + + /** + * @ticket 37697 + */ + function test__wp_preview_post_thumbnail_filter_secondary_post() { + $old_post = isset( $GLOBALS['post'] ) ? $GLOBALS['post'] : null; + + $secondary_post = self::factory()->post->create( array( + 'post_stauts' => 'publish', + ) + ); + + $GLOBALS['post'] = self::$post; + $_REQUEST['_thumbnail_id'] = self::$attachment_id; + $_REQUEST['preview_id'] = $secondary_post; + + $result = _wp_preview_post_thumbnail_filter( '', self::$post->ID, '_thumbnail_id' ); + + // Clean up. + $GLOBALS['post'] = $old_post; + unset( $_REQUEST['_thumbnail_id'] ); + unset( $_REQUEST['preview_id'] ); + + $this->assertEmpty( $result ); } /**