Как отключить создание миниатюр в WordPress?
Я долго искал в интернете способ отключить создание WordPress множественных миниатюр.
В большинстве руководств предлагается установить размер всех изображений на 0 в разделе медиафайлов. Я сделал это, но при проверке папки загрузок всё равно создаются множественные изображения.
Я не могу найти решение этой проблемы. Причина, по которой я хочу это сделать - сэкономить место на аккаунте хостинга.

Чтобы продолжить ответ Макса Юдина, вам следует использовать фильтр intermediate_image_sizes_advanced
, а не image_size_names_choose
. Добавьте в functions.php:
function add_image_insert_override($sizes){
unset( $sizes['thumbnail']);
unset( $sizes['medium']);
unset( $sizes['large']);
return $sizes;
}
add_filter('intermediate_image_sizes_advanced', 'add_image_insert_override' );
Другой, более простой вариант, который, как мне кажется, работает — это перейти в Настройки-->Медиафайлы и установить значения ширины и высоты для каждого поля в 0
.

Вы также можете отфильтровать intermediate_image_sizes с пустым массивом.
add_filter( 'intermediate_image_sizes', '__return_empty_array' );
// Добавляем фильтр, который возвращает пустой массив для intermediate_image_sizes
// Это отключает создание промежуточных (thumbnail) размеров изображений

Перейдите на страницу Настройки > Медиафайлы в админ-панели WordPress. В разделе Размеры изображений измените все значения на 0.
Сохраните изменения. Это предотвратит автоматическое создание WordPress миниатюр, средних и больших версий для каждого загружаемого изображения.
Вы также заметите, что при вставке изображения выпадающий список "Размер" больше не отображается.

Если я правильно помню, вам нужно сбросить все стандартные размеры через unset
и добавить новый размер Size
:
<?php
function mxdCustomImageSizes($sizes) {
unset( $sizes['thumbnail']);
unset( $sizes['medium']);
unset( $sizes['large']);
unset( $sizes['full'] );
$myimgsizes = array(
'full-size' => __( 'Полный размер' )
);
if( !empty($sizes) )
return array_merge($sizes, $myimgsizes);
else
return $myimgsizes;
}
add_filter('intermediate_image_sizes_advanced', 'mxdCustomImageSizes');
Затем добавьте размер full-size
с параметрами 99999x99999
, что практически означает полный размер без ограничений.
add_image_size( 'full-size', 99999, 99999, false );
Поправьте меня, если что-то не так.
P. S. Вам понадобится плагин для пересохранения всех изображений согласно новым настройкам. Я могу порекомендовать плагин Regenerate Thumbnails.
P. P. S. Когда есть только один вариант выбора, вам всё равно придётся выбирать из одного :). В новом медиа-окне (версии 3.5.1) нет прямого способа сделать один размер выбранным по умолчанию.

Привет, Макс, я думаю, это неправильный фильтр, image_size_names_choose
используется для вывода при выборе изображений в медиабоксе.

Для последней версии WordPress с активированным плагином WooCommerce используйте этот код:
function add_image_insert_override($sizes){
// Удаляем ненужные размеры изображений
unset($sizes['thumbnail']);
unset($sizes['medium']);
unset($sizes['medium_large']);
unset($sizes['large']);
unset($sizes['1536x1536']);
unset($sizes['2048x2048']);
unset($sizes['blog-isotope']);
unset($sizes['product_small_thumbnail']);
unset($sizes['shop_catalog']);
unset($sizes['shop_single']);
unset($sizes['shop_single_small_thumbnail']);
unset($sizes['shop_thumbnail']);
unset($sizes['woocommerce_thumbnail']);
unset($sizes['woocommerce_single']);
unset($sizes['woocommerce_gallery_thumbnail']);
return $sizes;
}
// Добавляем фильтры
add_filter('intermediate_image_sizes_advanced', 'add_image_insert_override' );
add_filter('max_srcset_image_width', create_function('', 'return 1;'));
Но будет лучше, если вы оставите один маленький миниатюрный размер (thumbnail
) и одно изображение среднего размера (medium
).
P.S. Все зарегистрированные размеры можно посмотреть, установив плагин Regenerate Thumbnails. И не забывайте про размеры, генерируемые функцией add_image_size()
в теме.

Да, именно это делает ответ Криса О, но на хуке not-advanced и с использованием встроенной функции __return_empty_array.

function remove_default_image_sizes( $sizes) {
unset($sizes['thumbnail']); // Удаляем миниатюру
unset($sizes['medium']); // Удаляем средний размер
unset($sizes['large']); // Удаляем большой размер
return $sizes; // Возвращаем изменённый массив
}
add_filter('intermediate_image_sizes_advanced','remove_default_image_sizes');
Не забудьте вернуть return $sizes;
, как показано в примере.
Затем добавьте новые размеры изображений следующим образом...
if(function_exists('add_image_size')){
add_image_size('my_100x100_crop',100,100,true); // Режим обрезки
add_image_size('my_100x100_resize',100,100); // Режим изменения размера
}
Протестировано!

Я столкнулся с проблемами при использовании фильтра intermediate_image_sizes_advanced
на нескольких сайтах. Похоже, что в WP 5.3 intermediate_image_sizes
работает более надежно.
Я бы рекомендовал удалять нежелательные размеры вот так:
add_filter('intermediate_image_sizes', 'remove_default_img_sizes', 10, 1);
function remove_default_img_sizes($sizes)
{
$targets = ['medium', 'medium_large', 'thumbnail'];
foreach ($sizes as $size_index=>$size) {
if (in_array($size, $targets)) {
unset($sizes[$size_index]);
}
}
return $sizes;
}

Поскольку в WordPress часто установлен WooCommerce, этот код отключает перегенерацию изображений при добавлении в файл functions.php (например, в дочерней теме или через плагин для сниппетов кода, так как в противном случае он может быть перезаписан при обновлениях).
add_filter( 'woocommerce_background_image_regeneration', '__return_false' );

Это действительно отключает регенерацию изображений, или просто означает, что это не будет происходить в фоновом режиме, но всё равно выполнится в основном процессе?

В моем случае недостаточно было отключить генерацию миниатюр ни в админке, ни в коде.
Тогда я нашел отличный плагин.
ThumbPress – Остановите генерацию ненужных миниатюр (от Codexpert, Inc)
