Фильтр для удаления атрибутов размеров изображения?
Я работаю над сайтом на основе CSS-шаблона с гибкой шириной, который устанавливает максимальную ширину изображений по ширине содержащей их колонки, и мне нужно удалить встроенные атрибуты размеров width и height, которые WordPress добавляет к изображениям.
Я делаю это для изображений записей с помощью следующего фильтра:
add_filter( 'post_thumbnail_html', 'remove_thumbnail_dimensions', 10, 3 );
function remove_thumbnail_dimensions( $html, $post_id, $post_image_id ) {
// Удаляем атрибуты width и height из HTML
$html = preg_replace( '/(width|height)=\"\d*\"\s/', "", $html );
return $html;
}
Я знаю, что могу применить тот же фильтр к the_content, если необходимо. Но есть ли лучший способ сделать это?

Спасибо всем!
Фильтр image_send_to_editor оказался именно тем, что я искал... спасибо @t31os за подсказку.
Вот мои текущие функции.
add_filter( 'post_thumbnail_html', 'remove_thumbnail_dimensions', 10 );
add_filter( 'image_send_to_editor', 'remove_thumbnail_dimensions', 10 );
function remove_thumbnail_dimensions( $html ) {
$html = preg_replace( '/(width|height)=\"\d*\"\s/', "", $html );
return $html;
}
Этот код удаляет встроенные атрибуты ширины и высоты у изображений, полученных через the_post_thumbnail()
, а также предотвращает добавление этих атрибутов к новым изображениям, вставляемым в редактор. Не удаляет атрибуты у изображений, полученных через wp_get_attachment_image
или другие связанные функции (там нет хуков), но эти случаи можно обработать непосредственно в файлах шаблонов при необходимости.

Мне пришлось удалить \s из регулярного выражения. После этого всё заработало как надо. Думаю, проблема была в том, что у меня не было пробела после последней кавычки в настройке высоты.

@MattSlay Только у меня есть проблемы с постоянным изменением контента сайта? Адаптивная тема не должна изменять содержимое сайта, чтобы добиться правильного форматирования. Я предлагаю убрать фильтр из image_send_to_editor
и вместо этого добавить его в the_content
— как в этом посте блога. Так мы отделим логику представления от контента.

@BFTrick - Мне кажется, это вопрос контекста. Для адаптивной темы я с вами согласен, потому что нельзя полагаться на то, что существующий контент уже обработан таким образом, и неизвестно, понадобятся ли атрибуты размеров следующей установленной теме.
В моём случае я разрабатывал приложение, где тема была неотъемлемой частью контента, поэтому я выбрал менее ресурсоёмкий метод обработки изображений при их первом добавлении. Но вы правы, это хорошее замечание.

Немного изменил этот скрипт. Спасибо за помощь!
add_filter( 'post_thumbnail_html', 'remove_thumbnail_dimensions', 10 );
add_filter( 'image_send_to_editor', 'remove_thumbnail_dimensions', 10 );
// Только для фреймворка Genesis
add_filter( 'genesis_get_image', 'remove_thumbnail_dimensions', 10 );
// Удаляет также прикрепленные размеры изображений
add_filter( 'the_content', 'remove_thumbnail_dimensions', 10 );
function remove_thumbnail_dimensions( $html ) {
$html = preg_replace( '/(width|height)=\"\d*\"\s/', "", $html );
return $html;
}

Однако будьте осторожны. Фильтрация the_content также затронет YouTube-видео и любые другие атрибуты width/height.

если вы установили размер изображения в function.php как "gallery"
add_image_size( 'gallery', 200, 120, true );
вы можете удалить ширину и высоту для конкретного размера изображения, такого как "gallery":
add_filter( 'post_thumbnail_html', 'remove_thumbnail_dimensions', 10, 4 );
function remove_thumbnail_dimensions( $html, $post_id, $post_image_id,$post_thumbnail) {
if ($post_thumbnail=='gallery'){
$html = preg_replace( '/(width|height)=\"\d*\"\s/', "", $html );
}
return $html;
}

Применение этого фильтра к the_content
будет активировать его для всего контента. Это будет эффективно, но может повлиять на производительность и время загрузки вашего сайта. Лучше было бы, если бы вы сказали WordPress просто не вставлять встроенные теги ширины и высоты при первоначальной вставке изображений.
К сожалению, скрипты, которые фактически вставляют изображение, построены на JavaScript и взаимодействуют с wysiwyg-редактором TinyMCE. Возможно, есть способ подключиться к нему напрямую, но не с использованием стандартных вызовов add_filter()
.

@t31os - Думаю, это именно то, что я искал! Не знаю, почему раньше не заметил этот хук.

Ну, я очень надеюсь, что это поможет, похоже, что может сработать... отпишись и дай нам знать. :)

@t31os Да, это сработало! Спасибо! Я опубликую это как ответ, если ты не сделаешь это раньше.
