Eliminar dimensión de wp_get_attachment_image

10

Tengo algún problema al eliminar el ancho y el alto de las imágenes de mis archivos adjuntos cuando uso wp_get_attachment_image. Esto es lo que estoy usando para mostrar la imagen

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

Cómo se ve el código fuente

 <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" />

Me gustaría que se muestre de esta manera

 <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" />

La imagen se extrae de un campo de archivo repetible con una entrada con un id de slide_image_id. He estado mirando alrededor y he notado que uso wp_get_attachment_image_url pero cuando lo uso con mi código anterior, la imagen no se muestra. ¿Hay algo que estoy haciendo mal?

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

Nota al margen: $ entry ['slide_image_id'] es lo que se usa para llamar a mi campo de archivo repetible.

    
pregunta user3756781 06.01.2016 - 21:01

3 respuestas

8

Sus argumentos para ambos wp_get_attachment_image_url() y wp_get_attachment_image() están en el orden incorrecto: consulte la documentación vinculada para obtener más información. Además, wp_get_attachment_image_url() devuelve una URL, no un elemento de imagen real.

  

Eliminar los atributos width y height de los elementos <img> es   desaconsejable: si el diseño de la página está influenciado de alguna manera por el   tamaño de la imagen, el diseño se "glitch" tan pronto como el CSS que   especifica las dimensiones de la imagen o la imagen en sí se carga.

Lamentablemente, la función wp_get_attachment_image() está actualmente codificada (como en WordPress 4.4.1) para generar los atributos width y height <img> (consulte ticket # 14110 ), por lo que deberá construir el marcado de la imagen usted mismo. Esto se puede hacer siguiendo las indicaciones de fuente 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( '/>' );
  }
?>
    
respondido por el bosco 06.01.2016 - 21:45
11

Solución

Hice algunas pruebas / excavaciones del núcleo y encontré una solución a través del filtro 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' );

Esto parece permitirnos eliminar los atributos altura y ancho del html de la imagen generada de wp_get_attachment_image() , sin salir de los cánones reg-ex. También podríamos usar el filtro wp_get_attachment_image_src de una manera similar para eliminar el ancho / altura pero mantener el url .

Notas

Esta solución también eliminará los atributos srcset y sizes . Pero también es posible configurar los atributos srcset y tamaños a través del cuarto argumento de entrada $attr .

Como lo menciona @bosco, ha cambiado los argumentos de entrada icon y size en:

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

Usa esto en su lugar:

echo wp_get_attachment_image( $entry['slide_image_id'], 'full', true );
    
respondido por el birgire 06.01.2016 - 23:22
0

Simplemente usé CSS para este. No funciona en todos los escenarios, pero a menudo lo hará. Tomemos una imagen de 300px x 300px:

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

Esto limita las dimensiones de la imagen sin perder su relación de ancho a alto. De lo contrario también puedes usar REGEX:

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

Estas fueron algunas alternativas. Buena suerte.

    
respondido por el JMRC 09.11.2018 - 01:21

Lea otras preguntas en las etiquetas