Проблема: избыточные размеры изображений WooCommerce и их влияние на производительность
WooCommerce автоматически генерирует множество размеров изображений для товаров, чтобы адаптироваться под различные шаблоны и устройства. Однако не все эти размеры всегда нужны, особенно если вы используете кастомный дизайн или оптимизируете сайт под скорость. Излишние размеры занимают место на сервере и замедляют бэкапы и загрузку медиа.
Диагностика проблемы
- Проверьте размер папки
uploads/woocommerceи сравните с общей папкойuploads. - Посмотрите, какие размеры изображений создаются при загрузке новых товаров. Для этого можно использовать консоль WP-CLI команду:
wp media regenerate --dry-run- Сравните список размеров, которые генерируются, с теми, что реально используются в теме.
Пошаговое решение: удаление и отключение ненужных размеров WooCommerce
1. Определение размеров, которые создаёт WooCommerce
WooCommerce по умолчанию использует размеры woocommerce_thumbnail, woocommerce_single, woocommerce_gallery_thumbnail. Чтобы узнать точные размеры, можно выполнить в консоли WP-CLI:
wp media image-sizesИли посмотреть в файле woocommerce/includes/wc-image-functions.php.
2. Удаление уже существующих ненужных размеров из папки uploads
Для удаления файлов изображений определённого размера используйте следующий WP-CLI скрипт (замените 300x300 на нужный размер):
find wp-content/uploads/ -type f -name '*-300x300.*' -deleteЭто удалит все файлы с суффиксом размера -300x300.
3. Отключение генерации ненужных размеров в WooCommerce
Добавьте следующий код в functions.php вашей дочерней темы или в отдельный плагин:
function disable_woocommerce_image_sizes( $sizes ) {
unset( $sizes['woocommerce_thumbnail'] );
unset( $sizes['woocommerce_single'] );
unset( $sizes['woocommerce_gallery_thumbnail'] );
return $sizes;
}
add_filter( 'intermediate_image_sizes_advanced', 'disable_woocommerce_image_sizes' );Этот фильтр отключит генерацию стандартных размеров WooCommerce. Если нужны только некоторые размеры — удаляйте нужные из массива.
4. Перегенерация миниатюр
После внесения изменений запустите регенерацию миниатюр, чтобы удалить старые и создать только нужные размеры:
wp media regenerate --yesПроверка результата после внедрения
- Загрузите новый товар с изображением и проверьте, что в папке
uploadsне создаются лишние размеры. - Проверьте, что сайт корректно выводит изображения товаров.
- Замерьте размер папки uploads до и после удаления файлов.
- Убедитесь, что на странице товара не ломаются картинки, особенно в галерее и миниатюрах.
Частые ошибки и как их исправить
- Ошибка: Изображения не отображаются после отключения размеров.
Причина: Тема или плагины требуют эти размеры.
Решение: Отключайте размеры выборочно, тестируя каждый шаг. - Ошибка: Удаляются важные размеры, которые нужны для retina-дисплеев.
Причина: Отключение всех размеров подряд.
Решение: Оставьте необходимые размеры, напримерwoocommerce_single, если используются. - Ошибка: Команда
findне работает на Windows.
Решение: Используйте FTP-клиент для удаления вручную или PowerShell-скрипты.
Практические советы по безопасности и производительности
- Перед удалением файлов сделайте полный бэкап папки
uploads. - Используйте дочернюю тему для внесения изменений в
functions.php, чтобы избежать потери при обновлении. - Проверяйте совместимость с плагинами кеширования и CDN — иногда они кешируют старые размеры.
- Если сайт большой, удаление изображений лучше делать через WP-CLI, чтобы избежать тайм-аутов.
Сравнение вариантов удаления размеров изображений в WooCommerce
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Удаление через WP-CLI (find, media regenerate) | Быстро, подходит для больших сайтов, точечное удаление | Требует доступа к консоли, не подходит для новичков | Оптимизация производительности, очистка после изменений |
| Отключение размеров через фильтр в functions.php | Простой способ остановить генерацию новых размеров | Нужно тестировать, чтобы не сломать отображение | Когда хотите контролировать размеры без плагинов |
| Использование плагинов (например, Regenerate Thumbnails) | Удобно для новичков, графический интерфейс | Может создавать нагрузку, не всегда гибко | Для стандартных сайтов без доступа к серверу |