image-size

Відключаємо створення копій картинок в WordPress

Дата публікації: WordPress

За замовчуванням, WordPress генерує чотири розміри для кожної оригінальної картинки, яку ми завантажуємо. Теми і плагіни можуть створювати додаткові розміри зображень. Таким чином, ваш сайт може створювати від 5 до 10 і більше копій (дублів) кожного завантаженого зображення. Це може збільшити необхідний простір на диску і розмір бекап файлів. Добре, коли всі ці копії потрібні і використовуються в темі, однак за фактом цього не відбувається ніколи … І тому добре б скасувати реєстрацію додаткових розмірів мініатюр.

Коли потрібно прибирати генерацію копій зображень?

У всіх випадках, коли вам не потрібні розміри створюваних дублів. Якщо ви користуєтеся недорогим хостингом і дисковий простір на ньому обмежений. То варто перевірити, чи не створюються копії картинок, які не використовуються в темі. Також, численні дублі завантажуваних зображень, які поміщаються в папку uploads, можуть значно збільшити розмір бекап файлів – це як мінімум незручно. Уявіть самі, ви завантажили одну картинку, а WordPress створив ще 10 мініатюр до неї – 10 копій цієї картинки, при цьому деякі з дублів можуть бути майже такого ж розміру як і оригінал. Якщо у вас на сайті тисячі картинок, то це може викликати проблеми і складності.

Як дізнатися які розміри використовуються на сайті?

За замовчуванням WordPress створює чотири копії:

  1. мініатюру (thumbnail)
  2. середній розмір (medium)
  3. помірний великий (medium_large) з версії 4.4.
  4. великий розмір (large)

Крім цих розмірів, додаткові розміри може створювати сама тема. Наприклад, додаткові розмір для установки мініатюри поста, для постів в бічній панелі або для інших цілей.

Перш за все, вам потрібно визначити скільки копій створюється при завантаженні зображення. Для цього треба зайти в адмін панель і завантажте зображення великого розміру, нехай це буде картинка 1900х1000 пікселів (великий розмір потрібен для того, щоб були створені всі можливі копії). Потім зайдіть в папку завантажень зображень, зазвичай це: / wp-content / uploads /. Там файли упорядковано відповідно до років та місяців, зайдіть в останній рік і місяць, там ви повинні побачити файл, який тільки що завантажили і всі його копії:

Копії оригіналу завантаженої картинки картинок

Копії оригіналу завантаженої картинки картинок

Як бачите на зображенні, мій сайт створив 10 копій + оригінал картинки, що завантажував. Де 4 це копії за замовчуванням, а інша – це налаштування теми та плагінів.

Дізнаємося назви кожного розміру

Приклад з заливкою зображення, показує скільки їх створюється, але не показує як називається кожен розмір. Назву (ID) розміру потрібно знати, щоб його відключити.

Щоб дізнатися які розміри зареєстровані на сайті, додайте наступний код в теми header.php або footer.php. Так ви побачите які на сайті існують розміри і як вони називаються.


/**
* Отримує інформацію про всі зареєстровані розміри картинок.
*
* @global $_wp_additional_image_sizes
* @uses get_intermediate_image_sizes()
*
* @param boolean [$unset_disabled = true] Видалити зі списку розміри з 0 висотою і шириною?
* @return array Дані всіх розмірів.
*/
function get_image_sizes( $unset_disabled = true ) {
$wais = & $GLOBALS['_wp_additional_image_sizes'];
$sizes = array();
foreach ( get_intermediate_image_sizes() as $_size ) {
if ( in_array( $_size, array('thumbnail', 'medium', 'medium_large', 'large') ) ) {
$sizes[ $_size ] = array(
'width' => get_option( "{$_size}_size_w" ),
'height' => get_option( "{$_size}_size_h" ),
'crop' => (bool) get_option( "{$_size}_crop" ),
);
}
elseif ( isset( $wais[$_size] ) ) {
$sizes[ $_size ] = array(
'width' => $wais[ $_size ]['width'],
'height' => $wais[ $_size ]['height'],
'crop' => $wais[ $_size ]['crop'],
);
}
// size registered, but has 0 width and height
if( $unset_disabled && ($sizes[ $_size ]['width'] == 0) && ($sizes[ $_size ]['height'] == 0) )
unset( $sizes[ $_size ] );
}
return $sizes;
}
die( print_r( get_image_sizes() ) );

Тепер зайдіть на сайт і ви побачите подібний масив:


Array (
[thumbnail] => Array (
[width] => 150
[height] => 150
[crop] => 1
)
[medium] => Array (
[width] => 300
[height] => 300
[crop] =>
)
[large] => Array (
[width] => 1024
[height] => 1024
[crop] =>
)
)

Як відключити створення копій?

Щоб відключити генерацію копій за замовчуванням, зайдіть в Настройки> Медіафайли і поставте нуль для «великого» і «середнього» розмірів.

Сторінка налаштувань Медіафайли - залишаємо тільки потрібні розміри

Сторінка налаштувань Медіафайли – залишаємо тільки потрібні розміри

«Розмір мініатюри» рекомендую залишати, тому що цей розмір використовуються при створенні стандартної галереї і в превю завантажених файлів в адмін-панелі. Якщо прибрати ці розміри, то стандартна галерея не працюватиме як належить. А вікно медіатеки буде вантажити оригінали файлів, що буде сильно гальмувати адмінку.

Замітка: для відображення картинок в завантажених медіафайлів при прикріпленні картинки до запису, використовуються середній розмір (medium). Але якщо його немає, використовується мініатюра (thumbnail). Тому середній розмір можна сміливо відключати.

Розмір medium_large, створюваний за замовчуванням з версії 4.4 відключити на сторінці налаштувань медіафайлів неможливо. Для відключення використовуйте хук нижче. Або зайдіть на приховану сторінку налаштувань domain.name/wp-admin/options.php і вкажіть 0 в налаштуванні medium_large_size_w.

#1 Відключення у коді

Решта копії створється темою. Зазвичай код теми, що відповідає за генерацію додаткових розмірів можна знайти в файлі functions.php. Шукайте розміри які ви бачили зайшовши через FTP. Функцію add_image_size (). Виглядати вона буде приблизно так:

add_image_size(‘medium-thumb’, 550, 400, true);

Видаліть або закоментуйте цей рядок, так ви вимкніть генерацію розміру.

Також за створення копій може відповідати функція set_post_thumbnail_size (), виглядає вона так:

set_post_thumbnail_size (150, 150);

Її потрібно видалити або закоментувати.

# 2 Видалення зареєстрованих розмірів через фільтр

У версії WordPress 3.9. з’явилася функція remove_image_size () – дозволяє видалити вказаний розмір мініатюри (фізичні файли не видаляються). Тепер, замість видалення рядків, можна відключити непотрібні розміри додавши фільтр в файл functions.php:

add_action ( 'after_setup_theme', 'remove_plugin_image_sizes', 999);
function remove_plugin_image_sizes () {
remove_image_size ( 'image-name');
}

Тут ‘image-name’ назва розміру ( ‘medium-thumb’ з прикладу вище). Видалення вішається на подію after_setup_theme, зазвичай цієї події досить. 999 означає що пріоритет виконання функції видалення, пізній, тобто функція буде викликана після всіх інших під час цієї події.

# 3 Відключення створення додаткових розмірів через фільтр

Варіанти нижче можуть стати порятунком, коли ніякий інший не підходить. Обидва вони практично однакові. Вони не відключають реєстрацію розмірів, а просто видаляють їх при отриманні в потрібних місцях коду.

Варіант 1

Цей варіант більш повний, тому що він вимикає розміри в декількох місцях, а не тільки під час завантаження зображення в папку uploads, як це робить другий варіант.

Також плагіни роботи з зображеннями використовують функцію get_intermediate_image_sizes () для отримання проміжних розмірів. З цим варіантом, такі плагіни не побачать непотрібних розмірів зовсім.

## відключаємо створення ескізів у списку для зазначених розмірів
add_filter ( 'intermediate_image_sizes', 'delete_intermediate_image_sizes');
function delete_intermediate_image_sizes ($ sizes) {
// розміри які потрібно видалити
return array_diff ($ sizes, array (
'Medium_large',
'Large',
));
}

Варіант 2

Цей варіант відключає реєстрацію зазначених розмірів тільки коли картинка завантажується на сайт в папку uploads.

// відключаємо створення ескізів у списку для зазначених розмірів
add_filter ( 'intermediate_image_sizes_advanced', function ($ sizes) {
unset ($ sizes [ 'blog-large']);
unset ($ sizes [ 'blog-medium']);
unset ($ sizes [ 'tabs-img']);
unset ($ sizes [ 'related-img']);
unset ($ sizes [ 'portfolio-full']);

return $ sizes;
});

У цьому коді назви: ‘blog-large’, ‘blog-medium’ і т.д. – це назви зареєстрованих розмірів мініатюр, які не потрібно створювати при завантаженні оригінального зображення.

Висновок

Перш ніж використовувати матеріал з цієї статті, потрібно переконатися, що видаляються розміри тих дублів, які не використовуються в поточній темі, як мініатюр для записів, в бічній панелі або в інших типах постів. Видаляйте створювані копії тільки, коли впевнені, що вони не потрібні для належного функціонування теми.


Залишити відповідь

Войти с помощью: 

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *