В WordPress часто возникает необходимость кастомизировать вывод изображений в записях и на страницах без изменения файлов темы напрямую. Это особенно актуально, если вы используете стороннюю тему или планируете обновлять тему без потери изменений. В этой статье разберём несколько способов, как изменить HTML для изображений, используемых через функции WordPress, с помощью хуков, фильтров и плагинов.
Почему не стоит менять файлы темы для изменения вывода изображений
Многие новички при кастомизации вывода изображений в шаблонах темы сразу начинают править файлы single.php, content.php или functions.php. Это приводит к проблемам при обновлении темы: все изменения будут потеряны. К тому же, в современных темах вывод контента зачастую строится через функции и хуки, где можно вмешиваться через фильтры.
Поэтому лучше использовать возможности WordPress для изменения вывода изображений с помощью фильтров и действий, что позволит сохранить совместимость и гибкость.
Использование фильтра wp_get_attachment_image_attributes для изменения атрибутов изображений
Фильтр wp_get_attachment_image_attributes позволяет изменить атрибуты HTML-тега <img>, генерируемого функцией wp_get_attachment_image(). Это удобно для добавления или изменения классов, alt-текста и других атрибутов.
Пример функции, которая добавляет кастомный класс и меняет alt:
function wpcore_change_image_attributes( $attr, $attachment, $size ) {
// Добавляем дополнительный класс
if ( isset( $attr['class'] ) ) {
$attr['class'] .= ' wpcore-custom-image';
} else {
$attr['class'] = 'wpcore-custom-image';
}
// Меняем alt на значение из метаполя _wp_attachment_image_alt или по умолчанию
$custom_alt = get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true );
if ( $custom_alt ) {
$attr['alt'] = $custom_alt . ' - кастомный alt';
} else {
$attr['alt'] = 'Кастомное описание изображения';
}
return $attr;
}
add_filter( 'wp_get_attachment_image_attributes', 'wpcore_change_image_attributes', 10, 3 );
Эту функцию достаточно добавить в файл functions.php дочерней темы или в собственный плагин.
Изменение вывода миниатюр с помощью фильтра post_thumbnail_html
Для изменения вывода миниатюр записей можно использовать фильтр post_thumbnail_html. Он позволяет менять весь HTML, генерируемый функцией the_post_thumbnail().
Например, добавим обёртку с классом и data-атрибутом:
function wpcore_filter_post_thumbnail_html( $html, $post_id, $post_thumbnail_id, $size, $attr ) {
// Оборачиваем миниатюру в див с классом
$html = '<div class="wpcore-thumbnail-wrapper" data-post-id="' . esc_attr( $post_id ) . '">' . $html . '</div>';
return $html;
}
add_filter( 'post_thumbnail_html', 'wpcore_filter_post_thumbnail_html', 10, 5 );
Это решение особенно полезно для добавления стилизации или взаимодействия с JavaScript.
Фильтр image_send_to_editor для кастомизации вставляемого в контент HTML
Когда вы вставляете изображение из медиабиблиотеки в редактор, WordPress использует фильтр image_send_to_editor. С его помощью можно изменить HTML, который попадёт в контент поста.
Например, добавим обёртку с ссылкой на оригинал и атрибут rel для лайтбокса:
function wpcore_customize_image_send_to_editor( $html, $id, $caption, $title, $align, $url, $size, $alt ) {
if ( $url ) {
$html = '<a href="' . esc_url( $url ) . '" rel="lightbox" class="wpcore-lightbox-link">' . $html . '</a>';
}
return $html;
}
add_filter( 'image_send_to_editor', 'wpcore_customize_image_send_to_editor', 10, 8 );
Этот подход позволяет без правки темы расширить функционал вставки медиа.
Использование плагина Clearfy для управления выводом изображений
Плагин Clearfy предлагает удобные инструменты для оптимизации и управления выводом изображений, включая отключение генерации лишних размеров изображений и оптимизацию атрибутов.
С помощью Clearfy можно быстро отключить ненужные размеры, что уменьшит нагрузку на сервер и ускорит загрузку страниц.
Создание собственного фильтра вывода изображений в плагине
Если вам нужно более глобальное и сложное решение, можно создать собственный плагин, который будет перехватывать и изменять вывод изображений, например, заменять теги <img> на <picture> с WebP и fallback-форматами.
Пример упрощённого фильтра, который заменяет все изображения в контенте:
function wpcore_replace_img_with_picture( $content ) {
// Паттерн для поиска img тегов
$pattern = '/<img(.*?)src=["\'](.*?)["\'](.*?)>/i';
// Замена img на picture с webp
$replacement = '<picture><source srcset="$2.webp" type="image/webp"><img$1src="$2"$3></picture>';
$content = preg_replace( $pattern, $replacement, $content );
return $content;
}
add_filter( 'the_content', 'wpcore_replace_img_with_picture' );
Это базовый пример, в реальных условиях стоит учитывать существование WebP файлов, fallback, а также добавлять атрибуты alt и классы.
Выводы и рекомендации по изменению вывода изображений в WordPress
Для изменения вывода изображений в WordPress без правки темы лучше всего использовать фильтры:
wp_get_attachment_image_attributes— изменение атрибутов тега img;post_thumbnail_html— изменение вывода миниатюр;image_send_to_editor— изменение вставляемого в редактор HTML;the_content— комплексные замены в контенте.
Также стоит рассмотреть использование плагинов, например, Clearfy, которые помогут оптимизировать работу с изображениями без глубокой доработки.
Подходы, описанные в статье, подходят для разработчиков и продвинутых пользователей, которые хотят гибко управлять выводом изображений и сделать сайт быстрее и удобнее.