Skip to main content

Remove Default Image Sizes

PropertyValue
descriptionRemove default WordPress image sizes.
tagslib, php, wp, oop
rating

Overview

Remove default generated image sizes from WordPress uploads. The snippet filters the intermediate image size lists and unregisters the larger core sizes so new uploads generate fewer derivative files.

The default target list includes core image sizes, WooCommerce sizes, Bricks sizes, and WordPress' 1536x1536 / 2048x2048 advanced sizes.

Variants

<?php
/**
* Remove Default Image Sizes
*
* intermediate_image_sizes filter -> https://developer.wordpress.org/reference/hooks/intermediate_image_sizes/
* intermediate_image_sizes_advanced -> https://developer.wordpress.org/reference/hooks/intermediate_image_sizes_advanced/
* remove_image_size() -> https://developer.wordpress.org/reference/functions/remove_image_size/
*/

add_filter( 'intermediate_image_sizes', 'mac_remove_default_image_sizes', 10, 1 );

if ( ! function_exists( 'mac_remove_default_image_sizes' ) ) {
/**
* @param string[] $sizes
* @return string[]
*/
function mac_remove_default_image_sizes( array $sizes ): array {

/** @var string[] $targets */
$targets = [
// Core
'thumbnail',
'medium',
'medium_large',
'large',

// Woo
'woocommerce_thumbnail',
'woocommerce_single',
'woocommerce_gallery_thumbnail',

// Bricks
'bricks_large_16x9',
'bricks_large',
'bricks_large_square',
'bricks_medium',
'bricks_medium_square',
];

foreach ( $sizes as $size_index => $size ) {
if ( in_array( $size, $targets, true ) ) {
unset( $sizes[ $size_index ] );
}
}

return $sizes;
}
}

add_filter( 'intermediate_image_sizes_advanced', function( array $sizes ): array {

// Core
unset(
$sizes['1536x1536'],
$sizes['2048x2048']
);

return $sizes;
});

add_action( 'init', function(): void {
remove_image_size( '1536x1536' );
remove_image_size( '2048x2048' );
});