Supprimer la dimension de wp_get_attachment_image

10

Je rencontre des problèmes pour supprimer la largeur et la hauteur de mes images de pièces jointes lors de l'utilisation de wp_get_attachment_image. Voici ce que j'utilise pour afficher l'image

 <?php echo $image = wp_get_attachment_image( $entry['slide_image_id'], true, 'full'); ?>

À quoi ressemble le code source

 <img width="150" height="108" src="http://website:8888/wp-content/uploads/2015/12/cupcakes-and-cosmetics-logo.png"class="attachment-1 size-1" alt="cupcakes-and-cosmetics-logo" />

je voudrais qu'il affiche comme ceci

 <img src="http://website:8888/wp-content/uploads/2015/12/cupcakes-and-cosmetics-logo.png"class="attachment-1 size-1" alt="cupcakes-and-cosmetics-logo" />

L'image est extraite d'un champ de fichier répétable avec une entrée avec l'id de slide_image_id. Je suis en train de regarder autour de moi et suis averti d'utiliser wp_get_attachment_image_url mais lorsque je l'utilise avec le code ci-dessus, l'image ne s'affiche pas. Y a-t-il quelque chose que je fais de travers?

 <?php echo $image = wp_get_attachment_image_url( $entry['slide_image_id'], true, 'full'); ?>

Remarque secondaire: $ entry ['slide_image_id'] est utilisé pour appeler mon champ de fichier répétable.

    
posée user3756781 06.01.2016 - 21:01

3 réponses

8

Vos arguments pour wp_get_attachment_image_url() et wp_get_attachment_image() sont dans le mauvais ordre. Consultez la documentation liée pour plus de détails. De plus, wp_get_attachment_image_url() renvoie une URL, et non un élément d'image réel.

  

Supprimer les attributs width et height de <img> est   déconseillé: si la mise en page de la page est influencée de quelque façon par le   taille de l'image, la mise en page "glitch" dès que le CSS qui   spécifie les dimensions de l'image ou l'image elle-même se charge.

Malheureusement, la fonction wp_get_attachment_image() est actuellement (à partir de WordPress 4.4.1) codée en dur pour générer les attributs width et height <img> (voir ticket # 14110 ), vous devrez donc créer le balisage d'image vous-même. Pour ce faire, utilisez les indications de source de wp_get_attachment_image() :

<?php
  $attachment = get_post( $entry['slide_image_id'] );

  if( $attachment ) {
    $img_size_class = 'full';
    $img_atts = array(
      'src'   => wp_get_attachment_image_url( $entry['slide_image_id'], $img_size_class, false ),
      'class' => 'attachment-' . $img_size_class . ' size-' . $img_size_class,
      'alt'   => trim(strip_tags( get_post_meta( $entry['slide_image_id'], '_wp_attachment_image_alt', true) ) )
    );

    //If an 'alt' attribute was not specified, try to create one from attachment post data
    if( empty( $img_atts[ 'alt' ] ) )
      $img_atts[ 'alt' ] = trim(strip_tags( $attachment->post_excerpt ));
    if( empty( $img_atts[ 'alt' ] ) )
      $img_atts[ 'alt' ] = trim(strip_tags( $attachment->post_title ));

    $img_atts = apply_filters( 'wp_get_attachment_image_attributes', $img_atts, $attachment, $img_size_class );

    echo( '<img ' );
    foreach( $img_atts as $name => $value ) {
      echo( $name . '="' . $value . '" ';
    }
    echo( '/>' );
  }
?>
    
réponse donnée bosco 06.01.2016 - 21:45
11

Solution de contournement

J'ai effectué des recherches et des tests de base et trouvé une solution de contournement via le filtre wp_constrain_dimensions :

// Add filter to empty the height/width array
add_filter( 'wp_constrain_dimensions', '__return_empty_array' );
// Display image html
echo wp_get_attachment_image( $entry['slide_image_id'], 'full', true );
// Remove filter again
remove_filter( 'wp_constrain_dimensions', '__return_empty_array' );

Cela semble nous permettre de supprimer les attributs height et width de l'image générée html de wp_get_attachment_image() , sans sortir les canons reg-ex. Nous pourrions également utiliser le filtre wp_get_attachment_image_src de la même manière pour supprimer la largeur / hauteur tout en conservant l'URL . .

Notes

Cette solution de contournement supprimera également les attributs srcset et sizes . Mais il est également possible de définir les attributs srcset et tailles via le quatrième argument d'entrée $attr .

Comme mentionné par @bosco, vous avez activé les arguments d'entrée des icônes et taille dans:

echo wp_get_attachment_image( $entry['slide_image_id'], true, 'full' );

Utilisez ceci à la place:

echo wp_get_attachment_image( $entry['slide_image_id'], 'full', true );
    
réponse donnée birgire 06.01.2016 - 23:22
0

J'ai simplement utilisé CSS pour celui-ci. Cela ne fonctionne pas dans tous les scénarios, mais assez souvent, cela fonctionnera. Prenons une image de 300 x 300 pixels:

max-height: 300px;
max-width: 300px;
width: auto;

Ceci limite les dimensions de l'image sans perdre son rapport largeur sur hauteur. Sinon, vous pouvez également utiliser REGEX:

$html = preg_replace(array('/width="[^"]*"/', '/height="[^"]*"/'), '', $html);

C'étaient des alternatives. Bonne chance.

    
réponse donnée JMRC 09.11.2018 - 01:21

Lire d'autres questions sur les étiquettes