<?php
/**
* Kadence\Image_Sizes\Component class
*
* @package kadence
*/
namespace Kadence\Image_Sizes;
use Kadence\Component_Interface;
use function Kadence\kadence;
use WP_Post;
use function add_filter;
use function is_active_sidebar;
/**
* Class for managing responsive image sizes.
*/
class Component implements Component_Interface {
/**
* Gets the unique identifier for the theme component.
*
* @return string Component slug.
*/
public function get_slug() : string {
return 'image_sizes';
}
/**
* Adds the action and filter hooks to integrate with WordPress.
*/
public function initialize() {
//add_filter( 'wp_calculate_image_sizes', array( $this, 'filter_content_image_sizes_attr' ), 10, 2 );
//add_filter( 'wp_get_attachment_image_attributes', array( $this, 'filter_post_thumbnail_sizes_attr' ), 10, 3 );
}
/**
* Adds custom image sizes attribute to enhance responsive image functionality for content images.
*
* @param string $sizes A source size value for use in a 'sizes' attribute.
* @param array $size Image size. Accepts an array of width and height
* values in pixels (in that order).
* @return string A source size value for use in a content image 'sizes' attribute.
*/
public function filter_content_image_sizes_attr( string $sizes, array $size ) : string {
$width = $size[0];
if ( 740 <= $width ) {
$sizes = '100vw';
}
if ( kadence()->has_sidebar() ) {
$sizes = '(min-width: 960px) 75vw, 100vw';
}
return $sizes;
}
/**
* Adds custom image sizes attribute to enhance responsive image functionality for post thumbnails.
*
* @param array $attr Attributes for the image markup.
* @param WP_Post $attachment Attachment post object.
* @param string|array $size Registered image size or flat array of height and width dimensions.
* @return array The filtered attributes for the image markup.
*/
public function filter_post_thumbnail_sizes_attr( array $attr, WP_Post $attachment, $size ) : array {
$attr['sizes'] = '100vw';
if ( kadence()->has_sidebar() ) {
$attr['sizes'] = '(min-width: 960px) 75vw, 100vw';
}
return $attr;
}
}