web-dev-qa-db-fra.com

Supprimer la dimension de wp_get_attachment_image

Je ne parviens pas à supprimer la largeur et la hauteur de mes images de pièces jointes lors de l'utilisation de wp_get_attachment_image. C'est ce que j'utilise pour afficher l'image

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

A quoi ça 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 ça

 <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 mal?

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

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

10
user3756781

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.

Il est déconseillé de supprimer les attributs width et height__ de <img>: si la mise en page de la page est influencée de quelque manière que ce soit par la taille de l'image, la mise en page "glitch" dès que le CSS qui spécifie les dimensions de l'image, lui-même 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 devez donc créer le balisage d'image vous-même. Cela peut être fait en prenant des repères de wp_get_attachment_image() 's source :

<?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( '/>' );
  }
?>
8
bosco

Workaround

J'ai fait quelques recherches et tests de base et j'ai 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 HTML générée 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 le width / height mais garder le url .

Remarques

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 commuté les arguments icon et size input input in:

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 );
11
birgire

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 300px x 300px:

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

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

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

C'étaient des alternatives. Bonne chance.

1
JMRC