Make WordPress Core


Ignore:
Timestamp:
09/07/2022 09:43:28 PM (2 years ago)
Author:
flixos90
Message:

Media: Generate WebP only for certain registered image sizes.

The existing filter image_editor_output_format receives an additional parameter $size_name which is populated whenever it controls the output format for a specific registered image size to create. Otherwise, it remains empty. In order to achieve this, a low level change has been added in bringing a new $size_name class property to the WP_Image_Editor base class, which is introduced in a backward compatible way that will not cause conflicts with custom implementations.

This parameter is then used in new logic inside the wp_default_image_output_mapping() callback function for the filter, controlling whether image/jpeg should map to image/webp output or not. By default, this is enabled for all WordPress core image sizes by default, and this list can be modified using a new wp_image_sizes_with_additional_mime_type_support filter, e.g. to remove core sizes or add custom sizes.

The customization per image size may be further enhanced by providing a more declarative API via a new parameter on the add_image_size() function.

Props eugenemanuilov, flixos90, adamsilverstein, joegrainger.

Fixes #56526.
See #55443, #56288.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp-image-editor-gd.php

    r53547 r54097  
    228228     *
    229229     * @param array $sizes {
    230      *     An array of image size data arrays.
     230     *     Associative array of image size names and their data.
    231231     *
    232232     *     Either a height or width must be provided.
     
    248248
    249249        foreach ( $sizes as $size => $size_data ) {
     250            // Include size name in the data.
     251            $size_data['name'] = $size;
     252
    250253            $meta = $this->make_subsize( $size_data );
    251254
     
    262265     *
    263266     * @since 5.3.0
     267     * @since 6.1.0 The $sizes parameter may now include a $name key for each entry.
    264268     *
    265269     * @param array $size_data {
    266270     *     Array of size data.
    267271     *
    268      *     @type int  $width  The maximum width in pixels.
    269      *     @type int  $height The maximum height in pixels.
    270      *     @type bool $crop   Whether to crop the image to exact dimensions.
     272     *     @type int    $width  The maximum width in pixels.
     273     *     @type int    $height The maximum height in pixels.
     274     *     @type bool   $crop   Whether to crop the image to exact dimensions.
     275     *     @type string $name   Image size name.
    271276     * }
    272277     * @return array|WP_Error The image data array for inclusion in the `sizes` array in the image meta,
     
    278283        }
    279284
    280         $orig_size = $this->size;
     285        $orig_size      = $this->size;
     286        $orig_size_name = $this->size_name;
    281287
    282288        if ( ! isset( $size_data['width'] ) ) {
     
    290296        if ( ! isset( $size_data['crop'] ) ) {
    291297            $size_data['crop'] = false;
     298        }
     299
     300        if ( isset( $size_data['name'] ) ) {
     301            $this->update_size_name( $size_data['name'] );
    292302        }
    293303
     
    302312
    303313        $this->size = $orig_size;
     314        $this->size_name = $orig_size_name;
    304315
    305316        if ( ! is_wp_error( $saved ) ) {
Note: See TracChangeset for help on using the changeset viewer.