Oprește WordPress să adauge automat atributele width și height la imagini

30 sept. 2011, 10:18:21
Vizualizări: 38.3K
Voturi: 18

Mă întreb dacă există o modalitate simplă de a opri WordPress să adauge automat atributele de înălțime și lățime la imaginile reprezentative, alta decât folosirea expresiilor regulate (regex)...

Deoarece folosesc un grid flexibil pentru proiectul meu (cine nu folosește!), acest lucru cauzează unele probleme ciudate cu imaginile.

0
Toate răspunsurile la întrebare 8
1
14

Puteți elimina atributele width și height prin filtrarea rezultatului funcției image_downsize găsită în wp-includes/media.php. Pentru a face acest lucru, scrieți propria funcție și o executați prin fișierul functions.php al temei sau ca un plugin.

Exemplu:

Eliminați atributele width și height.

/**
 * Aceasta este o modificare a funcției image_downsize() din wp-includes/media.php
 * vom elimina toate referințele la lățime și înălțime, astfel încât tag-ul img 
 * nu va adăuga atributele width și height imaginii trimise editorului.
 * 
 * @param bool false Fără referințe la înălțime și lățime.
 * @param int $id ID-ul atașamentului pentru imagine.
 * @param array|string $size Opțional, implicit este 'medium'. Dimensiunea imaginii, fie array, fie string.
 * @return bool|array False în caz de eșec, array în caz de succes.
 */
function myprefix_image_downsize( $value = false, $id, $size ) {
    if ( !wp_attachment_is_image($id) )
        return false;

    $img_url = wp_get_attachment_url($id);
    $is_intermediate = false;
    $img_url_basename = wp_basename($img_url);

    // încercăm să obținem o dimensiune intermediară în noul stil
    if ( $intermediate = image_get_intermediate_size($id, $size) ) {
        $img_url = str_replace($img_url_basename, $intermediate['file'], $img_url);
        $is_intermediate = true;
    }
    elseif ( $size == 'thumbnail' ) {
        // Revenim la vechea miniatură
        if ( ($thumb_file = wp_get_attachment_thumb_file($id)) && $info = getimagesize($thumb_file) ) {
            $img_url = str_replace($img_url_basename, wp_basename($thumb_file), $img_url);
            $is_intermediate = true;
        }
    }

    // Avem dimensiunea reală a imaginii, dar ar putea fi necesar să o limităm dacă content_width este mai îngust
    if ( $img_url) {
        return array( $img_url, 0, 0, $is_intermediate );
    }
    return false;
}

Atașați noua funcție la hook-ul image_downsize:

/* Elimină referințele la înălțime și lățime din funcția image_downsize.
 * Am adăugat un nou parametru, deci prioritatea este 1, ca întotdeauna, iar 
 * noii parametri sunt 3.
 */
add_filter( 'image_downsize', 'myprefix_image_downsize', 1, 3 );

De asemenea, nu uitați să scalați corect imaginile în CSS:

/* Dimensiuni și alinieri ale imaginilor */
.entry-content img,
.comment-content img,
.widget img {
    max-width: 97.5%; /* Imagini fluide pentru articole, comentarii și widget-uri */
}
img[class*="align"],
img[class*="wp-image-"] {
    height: auto; /* Asigură-te că imaginile cu atribute de înălțime și lățime adăugate de WordPress sunt scalate corect */
}
img.size-full {
    max-width: 97.5%;
    width: auto; /* Previne întinderea imaginilor full-size cu atribute de înălțime și lățime în IE8 */
}

Sper că acest lucru vă ajută.

Toate cele bune,

30 sept. 2011 12:13:39
Comentarii

Aceasta elimină, din păcate, atributele srcset, sizes și alte atribute pentru imagini responsive. :( Aceasta este soluția mea actuală, care reconstruiește înapoi atributele: https://gist.github.com/cibulka/8e2bf16b0f55779af590472ae1bf9239

Petr Cibulka Petr Cibulka
4 oct. 2017 21:52:08
2
14

Poți folosi filtrul post_thumbnail_html pentru a elimina atributul:

function remove_img_attr ($html) {
    return preg_replace('/(width|height)="\d+"\s/', "", $html);
}

add_filter( 'post_thumbnail_html', 'remove_img_attr' );

Pune acest cod în fișierul tău functions.php

26 sept. 2013 09:12:06
Comentarii

Încă funcționează perfect.

Rahul Rahul
31 aug. 2017 09:04:53

Acesta este cel mai bun răspuns pe care l-am găsit

Oscar Godson Oscar Godson
2 mar. 2022 11:30:20
2

Puteți obține URL-ul imaginii reprezentative și să-l adăugați manual în conținut, de exemplu:

<?php 
$image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'thumbnail' ); 

if ($image) : ?>
    <img src="<?php echo $image[0]; ?>" alt="" />
<?php endif; ?> 
30 sept. 2011 11:12:49
Comentarii

funcționează doar pentru pagini WordPress hard-codate, ceea ce este inutil pentru un CMS.

S.. S..
29 iun. 2013 22:06:16

Ține minte: Această metodă previne imaginile responsive din WP 4.4 pentru că nu include atributul srcset.

Drivingralle Drivingralle
5 feb. 2016 09:33:35
2

Puteți suprascrie stilurile/atributele inline folosind !important:

.wp-post-image {
    width: auto !important; /* sau probabil 100% în cazul unui grid */
    height: auto !important; 
}

Nu este cea mai elegantă soluție, dar rezolvă problema ta.

9 iul. 2016 15:55:45
Comentarii

Din anumite motive clasa wp-post-image nu a fost inclusă în imaginile mele. În schimb aveam ceva de genul wp-image-26. A trebuit să folosesc un alt selector, dar ideea a funcționat.

Pier Pier
16 mai 2018 20:21:34

Într-adevăr @Pier, folosește răspunsul lui @marsandback de mai jos, în special cu selectorul de atribut includes, img[class*="wp-image-"]. Nu e nevoie de !important!

Brian Zelip Brian Zelip
29 mar. 2021 23:47:29
1

Soluție CSS:

img[class*="align"], img[class*="wp-image-"] {
    width: auto;
    height: auto;
}

Aceasta permite imaginilor responsive să funcționeze corect, în timp ce menții atributele de lățime și înălțime în elementul img, ceea ce este probabil mai bine pentru browserele vechi, performanță și/sau pentru a trece validatoarele HTML.

Soluție PHP:

Aceasta va preveni adăugarea atributelor width/height pe orice media nou adăugată în editorul WP (prin 'Adaugă Media'). Atenție, poate afecta și legendele imaginilor!

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

add_filter( 'post_thumbnail_html', 'remove_widthHeight_attribute', 10 );
add_filter( 'image_send_to_editor', 'remove_widthHeight_attribute', 10 );
7 aug. 2018 19:54:42
Comentarii

ACEASTA este cea mai bună soluție pentru WordPress, deoarece rezolvă problema imaginilor prea mari în interiorul unui tabel în editor, prevenind derularea orizontală. Aplică-o atât în zona front-end, cât și în cea de administrare!

scavenger scavenger
23 mar. 2024 21:06:09
2

Cea mai bună soluție este să plasați jquery în subsolul paginii

jQuery(document).ready(function ($) {
    jQuery('img').removeAttr('width').removeAttr('height');
});
23 oct. 2016 19:13:41
Comentarii

Orice explicație despre de ce aceasta este soluția "cea mai bună"?

Kit Johnson Kit Johnson
27 aug. 2017 07:09:19

deoarece uneori "add_filter" nu funcționează acolo unde vrei tu, de aceea am spus

Asad Ali Asad Ali
4 sept. 2017 00:10:06
2

Adaugă acest fragment de cod: (Se aplică și noului editor Gutenberg)

function disable_add_img_width_height( $value, $image, $context, $attachment_id ) {
    if ($context === 'the_content' || $context === 'the_excerpt' ||  $context === 'widget_text_content')
        return false;
    return $value;
}
add_filter( 'wp_img_tag_add_width_and_height_attr', 'disable_add_img_width_height', 10, 4 );
20 aug. 2021 11:54:13
Comentarii

Doar mă întrebam - există vreun motiv pentru a filtra în funcție de context?

James Snell James Snell
9 dec. 2023 19:17:53

@JamesSnell bineînțeles, ei bine, depinde de context... ;-)

daniel.gindi daniel.gindi
19 dec. 2023 14:07:08
0

Iată o soluție simplă în Javascript:

<script type="text/javascript">
jQuery.noConflict();
jQuery(document).ready(function($){
  $('img').each(function(){
  $(this).removeAttr('width')
  $(this).removeAttr('height');
 });
});
</script>

Aceasta poate fi folosită pentru a ținti imagini specifice în loc de toate imaginile, utilizând un selector CSS, astfel:

 $('.clasa-mea-specifica img').each(function()
20 ian. 2020 16:08:22