WordPress.org

Make WordPress Core

Opened 4 years ago

Last modified 7 weeks ago

#14110 new enhancement

Expose height and width attributes to 'wp_get_attachment_image_attributes' filter

Reported by: divinenephron Owned by:
Milestone: Future Release Priority: normal
Severity: minor Version: 3.0
Component: Media Keywords: has-patch 2nd-opinion
Focuses: Cc:

Description

The filter 'wp_get_attachment_image_attributes' allows you to alter the attributes of embedded images. However the height and width attributes aren't passed to this filter. These would be useful to have – I'm making a theme with a fluid layout where I have to remove all height and width attributes to ensure that the browser maintains the attribute of images when they're resized.

I've attached a patch with a fix. In it I've also changed the function 'get_image_tag' so that I could remove the immensely pointless 'hwstring' function.

Attachments (4)

wp_get_attachment_image.diff (3.4 KB) - added by divinenephron 4 years ago.
Patch to give the 'wp_get_attachment_image_attributes' filter access to the heigh and width attribues.
wp_get_attachment_image_shortened.diff (1.1 KB) - added by divinenephron 4 years ago.
Only the changed that are essential to the enhancement.
wp_get_attachment_image.2.diff (4.1 KB) - added by Sam_a 2 years ago.
Let plugins filter image dimensions via wp_get_attachment_image_attributes filter (*props divinenephron*). Restore image dimensions if they're missing after applying the filter (consistent with the wp_get_attachment_image()'s previous behavior). Pass $icon to the filter too. Move esc_attr closer to output. Update documentation. Whitespace.
wp_get_attachment_image.3.diff (4.1 KB) - added by wpsmith 2 years ago.
Minor modification to lines 695-6, restore null as empty strings

Download all attachments as: .zip

Change History (18)

divinenephron4 years ago

Patch to give the 'wp_get_attachment_image_attributes' filter access to the heigh and width attribues.

comment:1 divinenephron4 years ago

  • Keywords has-patch added

comment:2 nacin4 years ago

  • Keywords has-patch filter wp_get_attachment_image_attributes attribute height width attachment removed

I see no reason to move around so much code for such a simple request.

divinenephron4 years ago

Only the changed that are essential to the enhancement.

comment:3 divinenephron4 years ago

  • Cc divinenephron added
  • Component changed from Plugins to Media
  • Keywords has-patch filter wp_get_attachment_image_attributes attribute height width attachment added
  • Severity changed from normal to minor

Evidently it's rude to refactor code in an enhancement request – sorry about that.
I've attached "wp_get_attachment_image_shortened.diff" – a file that contains only the changes that are essential to the enhancement. Is that more acceptable.

comment:4 nacin3 years ago

  • Keywords filter wp_get_attachment_image_attributes attribute height width attachment removed
  • Milestone changed from Awaiting Review to 3.1

Sorry, wasn't trying to be rude. It's just really hard to see what's going on when there's a ton of unrelated red and green.

This code looks fine, aside from the coding whitespace. (We use tabs, not spaces.)

comment:5 follow-ups: nacin3 years ago

  • Keywords 2nd-opinion added
  • Milestone changed from 3.1 to Future Release

I think this has the potential to break the filter, for those who receive an array through wp_get_attachment_image_attributes and build their own, not expecting additional keys.

comment:6 scottconnerly3 years ago

  • Cc scottconnerly added

I too would like to be able to access the image's height/width information from within the wp_get_attachment_image_attributes filter.

comment:7 Sam_a2 years ago

+1. When I added the wp_get_attachment_image_attributes hook (#8732), I omitted the height and width attributes because wp_get_attachment_image() had used image_hwstring() to format those. But it really doesn't make any sense that they're left out.

Last edited 2 years ago by Sam_a (previous) (diff)

comment:8 in reply to: ↑ 5 Sam_a2 years ago

Replying to nacin:

I think this has the potential to break the filter, for those who receive an array through wp_get_attachment_image_attributes and build their own, not expecting additional keys.

That's true. I wonder how common that is.

Sam_a2 years ago

Let plugins filter image dimensions via wp_get_attachment_image_attributes filter (*props divinenephron*). Restore image dimensions if they're missing after applying the filter (consistent with the wp_get_attachment_image()'s previous behavior). Pass $icon to the filter too. Move esc_attr closer to output. Update documentation. Whitespace.

comment:9 in reply to: ↑ 5 Sam_a2 years ago

Replying to nacin:

I think this has the potential to break the filter, for those who receive an array through wp_get_attachment_image_attributes and build their own, not expecting additional keys.

Attached wp_get_attachment_image.2.diff should cover that.

Patch may look bigger than it is. ;)

wpsmith2 years ago

Minor modification to lines 695-6, restore null as empty strings

comment:10 wpsmith2 years ago

Wouldn't it make more sense to "restore" height/width ($attr['width']/$attr['height']) attributes as empty strings rather than their full value?

Last edited 2 years ago by wpsmith (previous) (diff)

comment:11 Sam_a2 years ago

Hi wpsmith,

Under WordPress's current behavior, the width and height attributes don't go through the wp_get_attachment_image_attributes filter, so a plugin that builds its own $attr array and returns it without width and height doesn't actually intend to remove them (as nacin noted in #5).

So if we also expose width and height in the filter, we want to continue that behavior — if the width and height keys are missing after applying the filter, restore them to their original values, as if they hadn't been removed.

Plugins that really want to empty width and height can set them to '' or false through the filter to get that.

comment:12 anatolbroder15 months ago

  • Cc anatol@… added

comment:13 anatolbroder15 months ago

Maybe you should combine the functions get_attachment_image and get_image_tag. They try to do similar things, but are both not flexible enough for using in plugins.

We need one low level function lowlevel_image for just creating an image tag from an attribute array.

<img
    alt='Image'
    class='image'
    data-image='{JSON}'
    height='456'
    id='123'
    src='image.png'
    title='Image'
    width='789'
    …
/>

And we need a high level function highlevel_image for own attachment images. The highlevel_image should collect the attributes from image meta an pass them to the lowlevel_image.

comment:14 ircbot7 weeks ago

This ticket was mentioned in IRC in #wordpress-dev by SergeyBiryukov. View the logs.

Note: See TracTickets for help on using tickets.