Filtru pentru a elimina atributele de dimensiune ale imaginilor?
Lucrez la un site bazat pe un șablon CSS cu lățime fluidă care setează o lățime maximă pentru imagini la lățimea coloanei care le conține și trebuie să elimin atributele inline de dimensiune width și height pe care WordPress le adaugă imaginilor.
Fac acest lucru cu imaginile mele reprezentative folosind acest filtru:
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;
}
Știu că pot aplica același filtru pentru the_content, dacă este necesar. Dar există o modalitate mai bună de a face acest lucru?

Mulțumesc tuturor!
Filtrul image_send_to_editor a fost cel pe care îl căutam... mulțumesc @t31os pentru indicare.
Iată funcțiile mele acum.
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;
}
Aceasta elimină atributele de dimensiune inline de la imaginile preluate cu the_post_thumbnail()
și previne adăugarea acestor atribute la imaginile noi adăugate în editor. Nu le elimină de la imaginile preluate prin wp_get_attachment_image
sau alte funcții similare (nu există hook-uri acolo), dar acele cazuri pot fi procesate în fișierele de template atunci când este necesar.

A trebuit să elimin \s din regex. După aceea, a funcționat bine. Cred că a fost din cauză că nu aveam un spațiu după ultimele ghilimele de la setarea înălțimii.

@MattSlay Sunt doar eu care am o problemă cu modificarea permanentă a conținutului site-ului? O temă responsive nu ar trebui să modifice conținutul site-ului pentru a-l formata corect. Votez să eliminăm filtrul din image_send_to_editor
și să-l adăugăm în the_content
- ca în acest articol de blog. Asta separă logica de prezentare de conținut.

@BFTrick - Mi se pare o chestiune de context. Pentru o temă responsive, aș fi de acord cu tine pentru că nu poți conta pe faptul că conținutul existent a fost procesat în acest fel și nu știi dacă următoarea temă instalată va avea nevoie de acele atribute de dimensiuni.
În cazul meu, construiam o aplicație în care tema era parte integrantă din conținut, așa că am ales metoda mai puțin intensivă din punct de vedere al procesării, anume procesarea imaginilor când erau adăugate inițial. Dar ai dreptate în ceea ce spui.

Am modificat puțin acest script. Mulțumesc pentru ajutor!
add_filter( 'post_thumbnail_html', 'remove_thumbnail_dimensions', 10 );
add_filter( 'image_send_to_editor', 'remove_thumbnail_dimensions', 10 );
// Doar pentru framework-ul Genesis
add_filter( 'genesis_get_image', 'remove_thumbnail_dimensions', 10 );
// Elimină și dimensiunile atașate ale imaginilor
add_filter( 'the_content', 'remove_thumbnail_dimensions', 10 );
function remove_thumbnail_dimensions( $html ) {
$html = preg_replace( '/(width|height)=\"\d*\"\s/', "", $html );
return $html;
}

Atenție, totuși. Filtrarea the_content va afecta și videoclipurile YouTube și orice alt atribut width/height.

dacă setezi dimensiunea imaginii în functions.php ca "gallery"
add_image_size( 'gallery', 200, 120, true );
poți elimina lățimea și înălțimea pentru o dimensiune specifică a imaginii, cum ar fi "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;
}

Aplicarea acelui filtru la the_content
îl va declanșa pentru tot conținutul. Acest lucru va fi eficient, dar ar putea afecta performanța și timpul de încărcare al site-ului tău. Ar fi mai bine dacă ai spune WordPress să nu insereze etichetele inline pentru lățime și înălțime atunci când introduci imaginile în primul rând.
Din păcate, scripturile care inserează efectiv imaginea sunt construite în JavaScript și interacționează cu editorul wysiwyg TinyMCE. Ar putea exista o modalitate de a te conecta direct la el, dar nu folosind apelurile standard add_filter()
.

@t31os - Cred că asta era ceea ce căutam! Nu știu de ce nu am văzut acel hook înainte.

Ei bine, sper că te va ajuta, se pare că ar putea face treaba... anunță-ne și spune-ne dacă a funcționat. :)

@t31os Da, asta a funcționat! Mulțumesc! O să postez ca răspuns, dacă nu ajungi tu mai întâi.
