In WordPress we can use wp_get_attachment_image() to get the rendered markup for an image. We can use wp_get_attachment_image_src() to get an array of url, width, height, is_generated (i.e. not original upload).
We also have wp_get_attachment_metadata() to get the attachment meta data. Or for the attributes needed for responsive images we can use wp_get_attachment_image_sizes() and wp_get_attachment_image_srcset().
However, I’ve not found a good way to get an array of the attributes of an image (i.e. I want the same information wp_get_attachment_image()
provides but in an array rather than rendered markup).
So I wrote this class.
<?php | |
/** | |
* Get WordPress Attachment Image Attributes. | |
* | |
* Similiar to running WordPress's wp_get_attachment_image() but | |
* instead of getting back rendered HTML, we get back an array | |
* where the key is the attribute name and the value is the attribute value. | |
* | |
* This is done by using the `wp_get_attachment_image_attributes` filter. | |
* | |
* e.g. | |
* | |
* [ | |
* 'width' => '1920' | |
* 'height' => '1080' | |
* 'src' => 'https://example.test/wp-content/uploads/2018/08/sal-1920x1080.jpg', | |
* 'srcset' => 'https://example.test/wp-content/uploads/2018/08/sal-1920x1080.jpg 1920, https://example.test/wp-content/uploads/2018/08/sal-960x540.jpg 960w', | |
* 'alt' => 'Photograph of Sal.', | |
* 'sizes' => '(max-width: 1920px) 100vw, 1920px' | |
* 'class' => 'attachment-fe-hero size-fe-hero' | |
* ] | |
* | |
* @package salcode/wp-get-attachment-image-attributes | |
*/ | |
declare(strict_types=1); | |
namespace salcode\WPGetAttachmentImageAttributes; | |
/** | |
* Class: GetAttachmentImageAttributes | |
*/ | |
class GetAttachmentImageAttributes { | |
const FILTER_PRIORITY = 9999999; | |
/** | |
* Image Attributes. | |
* | |
* Key/value array. | |
* | |
* @var string[] | |
*/ | |
protected $attributes = []; | |
/** | |
* The attachment_id for the image. | |
* | |
* @var int | |
*/ | |
protected $attachment_id; | |
/** | |
* WordPress Image Size. | |
* | |
* Either a WordPress image size string or an array of [ $width, $height ]. | |
* | |
* @var string | array | |
*/ | |
protected $size; | |
/** | |
* The image should be treated as an icon. | |
* | |
* @var bool | |
*/ | |
protected $icon = false; | |
/** | |
* Attributes to be applied to the image. | |
* | |
* @var string | array | |
*/ | |
protected $attr = ''; | |
public function __construct( int $attachment_id, $size = 'thumbnail', $icon = false, $attr = '' ) { | |
$this->attachment_id = $attachment_id; | |
$this->size = $size; | |
$this->icon = $icon; | |
$this->attr = $attr; | |
} | |
public function get_attributes() { | |
add_filter( 'wp_get_attachment_image_attributes', [ $this, 'capture_attributes' ], self::FILTER_PRIORITY ); | |
wp_get_attachment_image( | |
$this->attachment_id, | |
$this->size, | |
$this->icon, | |
$this->attr | |
); | |
remove_filter( 'wp_get_attachment_image_attributes', [ $this, 'capture_attributes' ], self::FILTER_PRIORITY ); | |
return ! empty( $this->attributes ) ? $this->attributes : []; | |
} | |
public function capture_attributes( $attributes ) { | |
$this->attributes = $attributes; | |
return $attributes; | |
} | |
static public function get( int $attachment_id, $size = 'thumbnail', $icon = false, $attr = '' ) { | |
$obj = new static( $attachment_id, $size, $icon, $attr ); | |
return $obj->get_attributes(); | |
} | |
} |
Which allows us to get this array of information for an attachment (in this case for the attachment with attachment id 114
).
$img_attributes = \salcode\WPGetAttachmentImageAttributes\get( 114 );
Leave a Reply