На небольших и контентных сайтах на GeneratePress часто всплывает одна и та же проблема: страница визуально без изображений, а в HTML всё равно тянутся атрибуты srcset, sizes и связанные с ними медиа-обработки. Сам по себе это не баг темы, но в ряде сценариев лишняя генерация картинок мешает чистке шаблона, усложняет аудит Lighthouse и иногда создаёт путаницу при разборе того, какие изображения реально используются на странице.
Если задача не в глобальном отключении responsive images, а именно в точечной чистке отдельных типов страниц GeneratePress, лучше идти от диагностики: сначала понять, откуда именно приходит картинка, а потом убрать источник, а не ломать весь медиа-пайплайн WordPress.
Когда это вообще нужно
Сценарий обычно такой: у вас есть страницы, где контент состоит из текста, блоков и, возможно, одного логотипа или иконки, но в исходнике появляются дополнительные img с srcset, либо тема/плагин подставляет изображение записи в шапку, хлебные крошки, карточки похожих материалов или блоки автора. В GeneratePress это особенно заметно, если используются элементы темы, hooks-контент или сторонние блоки, которые автоматически подхватывают featured image.
Важно не путать две разные задачи:
- убрать реальные изображения из шаблона страницы;
- отключить только responsive-атрибуты у конкретных картинок.
Если картинка на странице не нужна вообще, правильнее убрать сам вывод. Если картинка нужна, но вы хотите минимизировать лишние атрибуты, тогда уже имеет смысл точечная фильтрация.
Диагностика: откуда берётся лишняя картинка
Сначала откройте исходный код страницы и найдите все теги <img>. Важно понять, кто именно их добавляет: контент записи, блок GeneratePress Elements, плагин для related posts, блок автора или встроенный featured image в шаблоне. Если картинка приходит из контента, GeneratePress тут ни при чём — нужно править сам блок или шаблон записи.
Полезно проверить ещё три места:
- Настройки Appearance → GeneratePress и активные модули темы.
- Раздел Elements, если используется GP Premium: hooks, block elements, page hero.
- Плагины, которые могут автоматически вставлять изображения в начало/конец контента.
Если в HTML есть srcset, но картинка одна и та же, это не всегда ошибка. WordPress по умолчанию генерирует responsive images для медиа-библиотеки. Проблема начинается тогда, когда этот механизм создаёт лишнюю нагрузку или мешает контролю над разметкой на конкретных шаблонах.
Пошаговое решение для GeneratePress
Ниже — рабочий подход, который не затрагивает весь сайт целиком. Сначала ограничиваем область действия, затем убираем только то, что действительно лишнее.
1. Уберите источник изображения в шаблоне
Если картинка выводится через GeneratePress Elements, проверьте условие показа элемента. Частая ошибка — элемент с featured image включён для всех записей, хотя нужен только на части страниц. В таком случае проще сузить правило отображения, чем потом пытаться фильтровать HTML.
Если изображение добавлено через hook, убедитесь, что оно не выводится на страницах, где его быть не должно:
<?php
add_action( 'generate_after_entry_title', function() {
if ( is_page() ) {
return;
}
if ( has_post_thumbnail() ) {
the_post_thumbnail( 'large', array( 'loading' => 'lazy' ) );
}
} );Этот пример полезен, если вы вручную вставляете featured image через hook и хотите исключить страницы. Логика простая: сначала проверка типа записи, потом вывод изображения.
2. Если нужно убрать только srcset у конкретных изображений
Иногда картинка нужна, но responsive-атрибуты создают лишний шум. Тогда можно отключить srcset и sizes для отдельных изображений по контексту. Делать это глобально стоит только если вы понимаете последствия: мобильные устройства могут получить менее подходящий размер файла.
<?php
add_filter( 'wp_calculate_image_srcset', function( $sources, $size_array, $image_src, $image_meta, $attachment_id ) {
if ( is_page( array( 'contacts', 'about' ) ) ) {
return false;
}
return $sources;
}, 10, 5 );
add_filter( 'wp_calculate_image_sizes', function( $sizes, $size_array, $image_src, $image_meta, $attachment_id ) {
if ( is_page( array( 'contacts', 'about' ) ) ) {
return false;
}
return $sizes;
}, 10, 5 );Этот вариант подходит, когда на конкретных страницах вы хотите оставить только один размер изображения без responsive-логики. Но не используйте его без необходимости на всём сайте: это может ухудшить отдачу картинок на разных экранах.
3. Если изображение приходит из контента, а не из шаблона
Тогда лучше не трогать фильтры WordPress, а изменить сам контент или блок. Например, если в редакторе Gutenberg вставлен блок «Изображение» с ненужными параметрами, проще заменить его на более компактный вариант или убрать атрибуты через редактор, чем писать код, который будет влиять на все изображения сайта.
Для GeneratePress это особенно актуально на страницах с минималистичным дизайном: тема сама по себе не навязывает тяжёлую разметку, а лишнее обычно приходит из контента или элементов.
Сравнение подходов
| Подход | Когда использовать | Минус |
|---|---|---|
| Убрать вывод изображения в шаблоне | Картинка не нужна вообще | Нужно проверить все условия показа |
Отключить srcset точечно | Картинка нужна, но responsive-атрибуты лишние | Может ухудшить адаптивную отдачу |
| Править контент/блоки | Изображение приходит из редактора | Не решает проблему, если источник в шаблоне |
Как проверить, что решение сработало
После правки не ограничивайтесь визуальной проверкой. Откройте страницу в режиме просмотра исходника и убедитесь, что:
- лишний
<img>больше не выводится; - у нужных изображений отсутствуют
srcsetиsizes, если вы их отключали; - страница не потеряла важный контент в мобильной версии;
- в консоли и логах нет PHP-ошибок, связанных с фильтрами.
Дополнительно проверьте страницу в DevTools на вкладке Network: если вы убирали картинку из шаблона, запрос к файлу изображения должен исчезнуть. Если вы только отключали srcset, сам файл останется, но набор дополнительных вариантов не должен подставляться.
Частые ошибки и как их исправить
Глобально отключили responsive images и сломали мобильную отдачу
Это самая частая ошибка. На десктопе всё выглядит нормально, а на телефонах сайт начинает грузить слишком тяжёлые изображения. Если задача точечная, используйте проверки по is_page(), is_single() или другим условиям, а не глобальный фильтр без ограничений.
Пытались убрать картинку через CSS
display:none скрывает элемент, но не убирает запрос к файлу. Для оптимизации это почти бесполезно. Если изображение не нужно, его надо не выводить в HTML.
Не учли GeneratePress Elements
В GeneratePress Premium часть визуальных элементов может быть собрана через hooks. Если вы правите только шаблон записи, а картинка продолжает появляться, проверьте именно Elements. Там часто лежит источник проблемы.
Сломали вывод миниатюр в архиве
Если фильтр написан слишком широко, он затронет не только нужную страницу, но и архивы, похожие записи, блоки автора и другие места, где миниатюра действительно нужна. Всегда начинайте с узкого условия и расширяйте его только после проверки.
Чек-лист перед публикацией
- Проверил, откуда именно приходит изображение: контент, hook, плагин или шаблон.
- Ограничил изменение только нужными типами страниц.
- Сравнил исходный HTML до и после правки.
- Проверил мобильную версию и не сломал адаптивные изображения там, где они нужны.
- Убедился, что в GeneratePress Elements нет дублирующего вывода.
Практические замечания по безопасности и производительности
Если вы добавляете код в functions.php, лучше делать это в дочерней теме или через небольшой mu-plugin. Так правка не потеряется после обновления темы. Для GeneratePress это особенно удобно: тема обновляется часто, а кодовая логика должна жить отдельно от шаблонов.
Не стоит отключать srcset ради «чистоты» исходника, если у вас много изображений в контенте. В большинстве случаев responsive images полезнее, чем их отсутствие. Точечная настройка оправдана только там, где вы точно понимаете, зачем убираете атрибуты и какой шаблон это затрагивает.
Если проблема оказалась не в теме, а в плагине, который автоматически вставляет изображения, лучше отключить именно этот механизм или заменить плагин. GeneratePress здесь выступает как аккуратная база, и лишнюю разметку обычно проще убрать на уровне источника, чем потом вычищать результат постфактум.