Wordpress - Remove Dimension from wp_get_attachment_image
Workaround
I did some core digging/testing and found a workaround through the wp_constrain_dimensions
filter:
// 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' );
This seems to allow us to remove the height and width attributes from the generated image html of wp_get_attachment_image()
, without getting out the reg-ex canons. We could also use the wp_get_attachment_image_src
filter in a similar way to remove the width/height but keep the url.
Notes
This workaround will remove the srcset
and sizes
attributes as well. But it's also possible to set the srcset and sizes attributes through the fourth $attr
input argument.
As mentioned by @bosco, you've switched the icon and size input arguments in:
echo wp_get_attachment_image( $entry['slide_image_id'], true, 'full' );
Use this instead:
echo wp_get_attachment_image( $entry['slide_image_id'], 'full', true );
Your arguments for both wp_get_attachment_image_url()
and wp_get_attachment_image()
are in the wrong order - check the linked documentation for details. Additionally, wp_get_attachment_image_url()
returns a URL - not an actual image element.
Removing the
width
andheight
attributes from<img>
elements is inadvisable: if the layout of the page is in any way influenced by the size of the image, the layout will "glitch" as soon as the CSS which specifies the image's dimensions, or the image itself loads.
Unfortunately, the wp_get_attachment_image()
function is currently (as of WordPress 4.4.1) hard-coded to output the width
and height
<img>
attributes (see ticket #14110), so you'll need to build the image markup yourself. This can be done by taking cues from 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( '/>' );
}
?>