diff --git a/src/wp-includes/theme.php b/src/wp-includes/theme.php index f4dfaeedc2..2f7dc1fca7 100644 --- a/src/wp-includes/theme.php +++ b/src/wp-includes/theme.php @@ -1535,6 +1535,24 @@ function add_theme_support( $feature ) { $args = array_slice( func_get_args(), 1 ); switch ( $feature ) { + case 'post-thumbnails': + // All post types are already supported. + if ( true === get_theme_support( 'post-thumbnails' ) ) { + return; + } + + /* + * Merge post types with any that already declared their support + * for post thumbnails. + */ + if ( is_array( $args[0] ) && is_array( $_wp_theme_features['post-thumbnails'][0] ) ) { + $post_types = array_unique( array_merge( $args[0], $_wp_theme_features['post-thumbnails'][0] ) ); + + $args = array( $post_types ); + } + + break; + case 'post-formats' : if ( is_array( $args[0] ) ) { $post_formats = get_post_format_slugs(); diff --git a/tests/phpunit/tests/theme/support.php b/tests/phpunit/tests/theme/support.php index c5669f8f5b..28180dcb93 100644 --- a/tests/phpunit/tests/theme/support.php +++ b/tests/phpunit/tests/theme/support.php @@ -52,6 +52,23 @@ class Tests_Theme_Support extends WP_UnitTestCase { $this->assertFalse( current_theme_supports( 'post-thumbnails' ) ); } + /** + * @ticket 22080 + */ + public function test_post_thumbnails_mixed_args() { + add_theme_support( 'post-thumbnails', array( 'post', 'page' ) ); + add_theme_support( 'post-thumbnails', array( 'page' ) ); + $this->assertTrue( current_theme_support( 'post-thumbnails', 'post' ) ); + $this->assertFalse( current_theme_supports( 'post-thumbnails', 'book' ) ); + $this->assertEquals( + array( 0 => array( 'post', 'page' ) ), + get_theme_support( 'post-thumbnails' ) + ); + + add_theme_support( 'post-thumbnails' ); + $this->assertTrue( current_theme_supports( 'post-thumbnails', 'book' ) ); + } + public function test_post_thumbnails_types_true() { // array of arguments, with the key of 'types' holding the post types. add_theme_support( 'post-thumbnails', array( 'types' => true ) );