Make WordPress Core

Changeset 38263


Ignore:
Timestamp:
08/15/2016 07:15:48 PM (8 years ago)
Author:
ocean90
Message:

Post Thumbnails: Restore thumbnail support for media files.

  • Allow to add/remove a featured image to attachment:audio and attachment:video post types, see [27657].
  • Change conditionals to check for theme OR post type support.
  • Add tests for #12922.

Broken in [37658].

Props flixos90, joemcgill, DrewAPicture, wonderboymusic.
See #12922.
Fixes #37658.

Location:
trunk
Files:
2 edited

Legend:

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

    r38201 r38263  
    32603260    }
    32613261
    3262     // Set or remove featured image.
    3263     if ( isset( $postarr['_thumbnail_id'] ) && ( post_type_supports( $post_type, 'thumbnail' ) || 'revision' === $post_type ) ) {
    3264         $thumbnail_id = intval( $postarr['_thumbnail_id'] );
    3265         if ( -1 === $thumbnail_id ) {
    3266             delete_post_thumbnail( $post_ID );
    3267         } else {
    3268             set_post_thumbnail( $post_ID, $thumbnail_id );
    3269         }
    3270     }
    3271 
    32723262    if ( ! empty( $postarr['meta_input'] ) ) {
    32733263        foreach ( $postarr['meta_input'] as $field => $value ) {
     
    32903280        if ( ! empty( $postarr['context'] ) ) {
    32913281            add_post_meta( $post_ID, '_wp_attachment_context', $postarr['context'], true );
     3282        }
     3283    }
     3284
     3285    // Set or remove featured image.
     3286    if ( isset( $postarr['_thumbnail_id'] ) ) {
     3287        $thumbnail_support = current_theme_supports( 'post-thumbnails', $post_type ) && post_type_supports( $post_type, 'thumbnail' ) || 'revision' === $post_type;
     3288        if ( ! $thumbnail_support && 'attachment' === $post_type && $post_mime_type ) {
     3289            if ( wp_attachment_is( 'audio', $post_ID ) ) {
     3290                $thumbnail_support = post_type_supports( 'attachment:audio', 'thumbnail' ) || current_theme_supports( 'post-thumbnails', 'attachment:audio' );
     3291            } elseif ( wp_attachment_is( 'video', $post_ID ) ) {
     3292                $thumbnail_support = post_type_supports( 'attachment:video', 'thumbnail' ) || current_theme_supports( 'post-thumbnails', 'attachment:video' );
     3293            }
     3294        }
     3295
     3296        if ( $thumbnail_support ) {
     3297            $thumbnail_id = intval( $postarr['_thumbnail_id'] );
     3298            if ( -1 === $thumbnail_id ) {
     3299                delete_post_thumbnail( $post_ID );
     3300            } else {
     3301                set_post_thumbnail( $post_ID, $thumbnail_id );
     3302            }
    32923303        }
    32933304    }
  • trunk/tests/phpunit/tests/post/thumbnails.php

    r37915 r38263  
    234234        $this->assertEquals( wp_get_attachment_url( self::$attachment_id ), $actual );
    235235    }
     236
     237    /**
     238     * @ticket 12922
     239     */
     240    function test__wp_preview_post_thumbnail_filter() {
     241        $old_post = isset( $GLOBALS['post'] ) ? $GLOBALS['post'] : null;
     242
     243        $GLOBALS['post'] = self::$post;
     244        $_REQUEST['_thumbnail_id'] = self::$attachment_id;
     245
     246        $result = _wp_preview_post_thumbnail_filter( '', self::$post->ID, '_thumbnail_id' );
     247        $this->assertEquals( self::$attachment_id, $result );
     248
     249        unset( $_REQUEST['_thumbnail_id'] );
     250        if ( null === $old_post ) {
     251            unset( $GLOBALS['post'] );
     252        } else {
     253            $GLOBALS['post'] = $old_post;
     254        }
     255    }
     256
     257    /**
     258     * @ticket 12922
     259     */
     260    function test_insert_post_with_post_thumbnail() {
     261        $post_id = wp_insert_post( array(
     262            'ID'            => self::$post->ID,
     263            'post_status'   => 'publish',
     264            'post_content'  => rand_str(),
     265            'post_title'    => rand_str(),
     266            '_thumbnail_id' => self::$attachment_id,
     267        ) );
     268
     269        $thumbnail_id = get_post_thumbnail_id( $post_id );
     270        $this->assertEquals( self::$attachment_id, $thumbnail_id );
     271
     272        $post_id = wp_insert_post( array(
     273            'ID'            => $post_id,
     274            'post_status'   => 'publish',
     275            'post_content'  => rand_str(),
     276            'post_title'    => rand_str(),
     277            '_thumbnail_id' => - 1, // -1 removes post thumbnail.
     278        ) );
     279
     280        $thumbnail_id = get_post_thumbnail_id( $post_id );
     281        $this->assertEmpty( $thumbnail_id );
     282    }
     283
     284    /**
     285     * @ticket 37658
     286     */
     287    function test_insert_attachment_with_post_thumbnail() {
     288        // Audio files support featured images.
     289        $post_id = wp_insert_post( array(
     290            'post_type'      => 'attachment',
     291            'post_status'    => 'inherit',
     292            'post_content'   => rand_str(),
     293            'post_title'     => rand_str(),
     294            'post_mime_type' => 'audio/mpeg',
     295            'post_parent'    => 0,
     296            'file'           => DIR_TESTDATA . '/audio/test-noise.mp3', // File does not exist, but does not matter here.
     297            '_thumbnail_id'  => self::$attachment_id,
     298        ) );
     299
     300        $thumbnail_id = get_post_thumbnail_id( $post_id );
     301        $this->assertEquals( self::$attachment_id, $thumbnail_id );
     302
     303        // Images do not support featured images.
     304        $post_id = wp_insert_post( array(
     305            'post_type'      => 'attachment',
     306            'post_status'    => 'inherit',
     307            'post_content'   => rand_str(),
     308            'post_title'     => rand_str(),
     309            'post_mime_type' => 'image/jpeg',
     310            'post_parent'    => 0,
     311            'file'           => DIR_TESTDATA . '/images/canola.jpg',
     312            '_thumbnail_id'  => self::$attachment_id,
     313        ) );
     314
     315        $thumbnail_id = get_post_thumbnail_id( $post_id );
     316        $this->assertEmpty( $thumbnail_id );
     317    }
    236318}
Note: See TracChangeset for help on using the changeset viewer.