#37479 closed enhancement (wontfix)
Ambiguous use of first parameter in wp_calculate_image_sizes
Reported by: |
|
Owned by: | |
---|---|---|---|
Milestone: | Priority: | normal | |
Severity: | normal | Version: | 4.6 |
Component: | Media | Keywords: | |
Focuses: | Cc: |
Description
The wp_calculate_image_sizes
function in WordPress takes $size
as a parameter, documented as:
Image size. Accepts any valid image size, or an array of width and height values in pixels (in that order). Default 'thumbnail'.
The code in this function tests if the parameter is a string, and calculates the width if so; otherwise simply using the first value of the array.
However, every single call to this function passes an array, not the size name. For example, wp_get_attachment_image
takes the size name, and converts it to an array before calling wp_calculate_image_sizes
. No call is ever made with a size name string.
I would like to request the parameter is enforced to be an array. The reason for doing so is in the wp_calculate_image_sizes
filter. To be strictly correct, any uses of this filter need to handle a string, thus need to duplicate all of the code for extracting a width. A theme like twentysixteen doesn't do this - it assumes the parameter is an array and uses $size[0]
as the width.
Alternately, the calculated width could be passed as an additional parameter to the filter, so that it does not need recalculating.
Change History (3)
#1
@
8 years ago
- Milestone Awaiting Review deleted
- Resolution set to wontfix
- Status changed from new to closed
#2
@
8 years ago
In that case, how about the alternative suggested in the last sentence?
While using the named size *may* provide some benefit to people using the *function*, passing the calculated width is virtually *guaranteed* to be required by anyone using the *filter*. Currently you need to duplicate all of the code for this calculation that was done in core (or, copy twentysixteen's method which will break if the named size was indeed used).
Hi @smerriman,
Thank you for the report.
The reason this function was designed to accept
$size
as both a string and an array is to be consistent with how$size
is used in other image functions, likewp_get_attachment_image()
. Internally in core, we are using an array for performance reasons (to avoid the extra metadata lookup if I recall correctly), but this function could also be used by theme or plugin authors to generate custom markup, in which case, being able to pass the named size towp_calculate_image_sizes()
is sometimes preferred.