Перейти до вмісту
Зображення та медіафайли

Розміри зображень товарів WooCommerce: три розміри і як їх насправді змінити

Які два з трьох розмірів зображень товарів WooCommerce ви справді можете редагувати, чому мініатюри каталогу обрізаються криво і як перегенерувати їх усі.

Опубліковано

WooCommerce генерує три розміри для кожного завантаженого фото товару, і лише два з них можна редагувати в адмінці WordPress. woocommerce_thumbnail — це зображення сітки каталогу, woocommerce_single — велике зображення на сторінці товару, а woocommerce_gallery_thumbnail — вузька смужка мініатюр під ним. Змінюють їх у Зовнішній вигляд > Налаштувати > WooCommerce > Зображення товарів — і якщо ця панель показує випадний список обрізання, але не показує полів ширини, ваш шаблон навмисно зафіксував ширини в коді.

Три розміри

Назва розміруДе з’являєтьсяОбрізанняРедагується в кастомайзері
woocommerce_thumbnailСторінка магазину, сітки категорій, схожі товари, крос-селиТипово жорстко обрізається до квадратаШирина і співвідношення
woocommerce_singleГоловне зображення на сторінці окремого товаруБез обрізання — зберігається оригінальне співвідношенняТільки ширина
woocommerce_gallery_thumbnailВузька смужка під головним зображенням товаруЖорстко обрізаний квадратНі

Вони йдуть поверх стандартних розмірів WordPress. Одне фото товару зазвичай породжує thumbnail, medium, medium_large, large, три розміри WooCommerce і, можливо, додаткові, які ваш шаблон зареєстрував через add_image_size. Це чимало файлів на одне завантаження — і саме тому імпорт 300 товарів триває так довго.

Мініатюра галереї — та, що зазвичай дивує: у неї взагалі немає жодного налаштування в адмінці. На типовому встановленні це маленький квадрат, історично 100px, і саме він найчастіше виглядає м’яко на retina-екрані, бо фізичний файл справді крихітний.

Де насправді живуть налаштування

Зовнішній вигляд > Налаштувати > WooCommerce > Зображення товарів дає три елементи керування:

  • Ширина головного зображення — ширина woocommerce_single. Висота обчислюється автоматично, тож оригінальне співвідношення сторін зберігається.
  • Ширина мініатюри — ширина woocommerce_thumbnail.
  • Обрізання мініатюри1:1 (квадрат, типово), Власне (ви вводите співвідношення, наприклад 4:3) або Без обрізання.

Зверніть увагу на те, чого бракує: поля висоти для мініатюри каталогу немає, бо висота виводиться зі співвідношення обрізання. А для мініатюри галереї немає взагалі нічого.

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

Чому зображення в каталозі виглядають неправильно

Мініатюра каталогу жорстко обрізається до квадрата. Жорстке обрізання означає, що WooCommerce бере квадрат із центру вашого фото, а решту викидає — воно не додає полів і не стискає пропорції. Знімок товару 2000x1200 стає шматком 1200x1200, вирізаним із середини, а потім зменшеним.

Для пляшки, знятої строго по центру з полями навколо, це нормально. Це катастрофа для:

  • Довгих товарів (лижі, кабелі, карнизи) — ви бачите середню третину й більше нічого
  • Композицій зі зміщенням від центру — товар відходить до краю кадру і його зрізає
  • Фотографій, де предмет заповнює кадр від краю до краю — верх і низ відрізаються
  • Лайфстайл-знімків, де товар у кутку

Звична порада — «перемкніть обрізання на Без обрізання». Це працює, але будьмо чесними щодо ціни: без обрізання кожна мініатюра зберігає власне співвідношення сторін, тож сітка з фотографій різної орієнтації стає візуально нерівною, а ряди перестають вирівнюватися, якщо CSS вашого шаблону не вміє працювати зі змінною висотою. Більшість шаблонів розраховує на квадрати.

Кращий варіант, якщо він вам по силах, — виправити джерело: стандартизувати квадратні фото товарів із предметом по центру й рівними полями. Тоді квадратне жорстке обрізання нічого не змінює, і все далі стає передбачуваним. Зміна налаштування кропу — це обхідний шлях; однакові вихідні зображення — справжнє рішення.

Коли шаблон фіксує ширини

Якщо ваша панель Зображення товарів пропонує лише обрізання, ваш шаблон задав фіксовані ширини під час реєстрації підтримки WooCommerce:

add_theme_support( 'woocommerce', array(
    'single_image_width'    => 800,
    'thumbnail_image_width' => 400,
) );

Коли шаблон передає ці значення, WooCommerce прибирає елементи керування шириною з кастомайзера й лишає тільки співвідношення. Це не баг і не ворожість шаблону — CSS розкладки товарів побудований саме навколо цих значень у пікселях, і можливість їх змінювати ламала б сітку.

Перекрити їх можна з functions.php дочірньої теми через фільтр для конкретного розміру:

add_filter( 'woocommerce_get_image_size_single', function ( $size ) {
    $size['width']  = 1000;
    $size['height'] = '';
    $size['crop']   = 0;
    return $size;
} );

add_filter( 'woocommerce_get_image_size_gallery_thumbnail', function ( $size ) {
    $size['width']  = 150;
    $size['height'] = 150;
    $size['crop']   = 1;
    return $size;
} );

Той самий підхід працює для woocommerce_get_image_size_thumbnail. Це ще й єдиний спосіб змінити мініатюру галереї, бо в неї немає інтерфейсу.

Реальна ціна, прямим текстом: перекривши зафіксовану ширину, ви отримуєте файл, який більше не збігається з тим, чого очікує CSS шаблону. Зазвичай зображення просто масштабується в браузері й виглядає добре, бо тепер воно більше за свій блок. Іноді в шаблоні є контейнер фіксованої висоти — і ви отримуєте поля або вихід за межі. Перевірте на одному товарі, перш ніж перегенеровувати 2000.

Зміна розмірів означає перегенерацію

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

WooCommerce запускає фонову перегенерацію, коли ви зберігаєте кастомайзер. На невеликому каталозі цього достатньо. На великому все залежить від того, чи надійно спрацьовує WP-Cron, а на магазині з невеликим трафіком він часто не спрацьовує — і ви отримуєте наполовину перегенеровану бібліотеку. Краще запустіть це самі:

wp media regenerate --yes

Щоб перебудувати лише зображення товарів:

wp media regenerate --yes --post_type=product

Якщо хочете прибрати фонове завдання з дороги, поки робите це вручну:

add_filter( 'woocommerce_background_image_regeneration', '__return_false' );

Двох речей перегенерація не зробить. Вона не видаляє старі файли — ваша директорія завантажень зберігає кожну осиротілу похідну з попередніх налаштувань, і вона тільки ростиме. І вона не може створити розмір більший за ваше джерело, бо WordPress не збільшує зображення. Якщо ви задали ширину головного зображення 1200, а ваші фото товарів мають 800px завширшки, файл на 1200px не з’явиться; браузер отримає файл на 800px і розтягне його, а srcset не матиме чого запропонувати натомість.

Який розмір справді варто завантажувати

Орієнтуйтеся на квадратні вихідні зображення приблизно вдвічі більші за найбільшу налаштовану ширину — 1200x1200 для головного зображення в 600px, 1600x1600, якщо ваш шаблон використовує 800px. Це покриває retina-екрани з подвійною щільністю й дає WordPress достатньо пікселів, щоб побудувати кожну похідну без збільшення. Тримайте всі товари в однакових розмірах, щоб сітка лишалася рівною.

Досі не працює?

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

FAQ

Питання

Які три розміри зображень товарів є у WooCommerce?

WooCommerce реєструє woocommerce_thumbnail для каталогу та сітки магазину, woocommerce_single для великого зображення на сторінці товару і woocommerce_gallery_thumbnail для вузької смужки мініатюр під головним зображенням. Кожне завантажене фото товару генерує всі три, на додачу до стандартних розмірів WordPress: thumbnail, medium, medium_large і large.

Де змінити розміри зображень товарів WooCommerce?

Перейдіть у Зовнішній вигляд, далі Налаштувати, далі WooCommerce, далі Зображення товарів. Там є ширина головного зображення, ширина мініатюри та вибір обрізання мініатюри: 1:1, власне співвідношення або без обрізання. Якщо полів ширини немає й показано лише обрізання, ваш активний шаблон задав фіксовані ширини в коді, і кастомайзер навмисно їх приховує.

Чому зображення в каталозі WooCommerce обрізані невдало?

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

Чи потрібно перегенеровувати мініатюри після зміни розмірів зображень WooCommerce?

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

Чому я не можу змінити ширину головного зображення у своєму шаблоні?

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

Якого розміру мають бути зображення товарів WooCommerce?

Завантажуйте квадратні вихідні зображення приблизно вдвічі більші за найбільшу ширину відображення, тобто 1200 на 1200 пікселів для головного зображення в 600 пікселів, і тримайте всі товари однаковими. WordPress ніколи не збільшує зображення, тож джерело менше за налаштовану ширину не дасть файлу такого розміру, і браузер розтягне менший.