Фільтр, щоб видалити атрибути параметри зображення?


35

Я працюю над сайтом, заснованим на шаблоні CSS з шириною рідини, який встановлює максимальну ширину для зображень на ширину стовпця, що містить їх, і мені потрібно видалити атрибути параметри розміру ширини та висоти, які WordPress додає до зображень.

Я роблю це зі своїми обраними зображеннями з цим фільтром:

add_filter( 'post_thumbnail_html', 'remove_thumbnail_dimensions', 10, 3 );

function remove_thumbnail_dimensions( $html, $post_id, $post_image_id ) {
    $html = preg_replace( '/(width|height)=\"\d*\"\s/', "", $html );
    return $html;
}

Я знаю, що я можу застосувати той самий фільтр до the_content , якщо необхідно. Але чи є кращий спосіб зробити це?


По-перше, дякую за дуже корисний код. Він ідеально підходить для вилучення атрибутів ширини та висоти з тегу img, але чомусь також здається позбавити короткого коду підпису, якщо такий є. Хтось знає, чому це так і як це виправити?
Домінік П

1
Можливо, ви повинні розмістити це як власне питання? Це здається достатньо відмінним від мого, що воно заслуговує на власну відповідь. Тим не менш, я спробую відповісти ... для всіх, хто знайде цю відповідь і має ту саму проблему: Ваша проблема полягає в тому, що функція img_caption_shortcode, яка обробляє короткий код підпису, вимагає, щоб ширина коду підпису була задана шириною. В іншому випадку він повністю пропускає підпис і просто повертає вміст, загорнутий всередині [caption]тегів короткого коду.
goldenapples

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

@goldenapples, дякую за корисну відповідь. Я зробив , як ви запропонували і задав нове питання тут: wordpress.stackexchange.com/questions/32931 / ... . Будь-який внесок щодо цього буде дуже вдячний. Як я пояснював у запитанні, я не впевнений, що фільтр img_caption_shortcodeбуде достатньо для вирішення проблеми.
Домінік П

1
Можливо, я пропускаю більшу картину того, що ви намагаєтеся зробити, не бачачи фактичного вмісту, але це не можна виправити лише за допомогою CSS? Якщо ви використовуєте максимальну ширину для своїх зображень, ви повинні мати можливість перемогти проблему з висотою, додавши висоту: auto; до ваших вмістових зображень.
бінаорганічний

Відповіді:


36

Дякую всім!

Я шукав фільтр 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інших або інших пов’язаних функцій (там немає гачків), але ці випадки при необхідності можуть бути оброблені у файлах шаблонів.


1
Мені довелося видалити \ s з регулярного виразу. Після цього воно спрацювало чудово. Я думаю, що це було тому, що у мене не було місця після останнього подвійного котирування на висоті.
MattSlay

1
@MattSlay Чи тільки у мене є проблеми з постійною зміною вмісту сайту? Відповідна тема не повинна змінювати вміст веб-сайту, щоб він міг правильно форматувати його. Я голосую за видалення фільтра image_send_to_editorі замість цього додати його the_content- як ця публікація в блозі . Це відокремлює логіку презентації від змісту.
BFTrick

1
@BFTrick - Здається, це для мене питання контексту. Що стосується чуйної теми, я погоджуся з вами, оскільки ви не можете залежати від існуючого вмісту, обробленого таким чином, і ви не знаєте, чи потрібна наступна встановлена ​​тема цих атрибутів виміру. У моєму випадку я будував додаток, де тема була невід'ємною частиною вмісту, тому я вибрав менш об'ємний для процесора метод обробки зображень, коли вони були вперше додані. Але ви добре зробите свою думку.
goldenapples

2
Попередження: Ця відповідь розбиває заголовки зображень у WordPress 3.5.1.
провідний

5

Цей сценарій трохи змінили. Дякую за допомогу!

add_filter( 'post_thumbnail_html', 'remove_thumbnail_dimensions', 10 );
add_filter( 'image_send_to_editor', 'remove_thumbnail_dimensions', 10 );
// Genesis framework only
add_filter( 'genesis_get_image', 'remove_thumbnail_dimensions', 10 );
// Removes attached image sizes as well
add_filter( 'the_content', 'remove_thumbnail_dimensions', 10 );
function remove_thumbnail_dimensions( $html ) {
    $html = preg_replace( '/(width|height)=\"\d*\"\s/', "", $html );
    return $html;
}

5
Однак обережно. Фільтруючи the_content, ви також фільтруєте відео з YouTube та будь-який інший атрибут ширини / висоти.
MikeNGarrett

1
Щоправда, але це може бути хорошою справою на чуйному сайті. Якщо потрібно зробити це для зображень, то, ймовірно, потрібно це зробити і для інших засобів масової інформації.
BFTrick

1

якщо встановити розмір зображення в function.php як "галерею"

add_image_size( 'gallery', 200, 120, true );

ви можете видалити ширину та висоту конкретного розміру зображення, наприклад "галерея":

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;
}

0

Застосувавши цей фільтр, the_contentвін зніме його для всього вмісту. Це буде ефективно, але може вплинути на ефективність та час завантаження вашого сайту. Було б краще, якщо ви скажете WordPress, щоби не вставляти теги ширини та висоти рядка, коли ви вставляєте зображення в першу чергу.

На жаль, сценарії, які насправді вставляють зображення, вбудовані в JavaScript і взаємодіють з редактором wyziwyg TinyMCE. Можливо, є спосіб підключити його безпосередньо, але не використовувати стандартні add_filter()дзвінки.


1
Тут не працював би фільтр image_send_to_editor?
t31os

@ t31os - Я думаю, що саме це я шукав! Не знаю, чому я раніше не бачив цього гака.
goldenapples

Ну я, звичайно, сподіваюся, що це допоможе, схоже, що це може зробити трюк ... Повідомте про це та повідомте нам. :)
t31os

@ t31os Так, це зробило трюк! Спасибі! Я опублікую це як відповідь, якщо ви не отримаєте спочатку.
goldenapples

2
Ти йдеш за цим товаришем, я не надто метушився, щасливий, що ти зміг знайти рішення ...;)
t31os
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.