Skip to content

Commit bfb362c

Browse files
authored
Merge pull request #72 from wpgaurav/claude/add-image-srcset-OP5W8
Add srcset/sizes attributes to all block images
2 parents 6ed5c8c + 878b9bf commit bfb362c

15 files changed

Lines changed: 105 additions & 27 deletions

File tree

acf-blocks.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Plugin Name: ACF Blocks
44
* Plugin URI: https://github.com/wpgaurav/acf-blocks-plugin
55
* Description: A collection of ACF Pro blocks for the WordPress block editor with automatic field group registration.
6-
* Version: 2.4.1
6+
* Version: 2.5.0
77
* Requires at least: 6.0
88
* Requires PHP: 7.4
99
* Author: Gaurav Tiwari
@@ -19,7 +19,7 @@
1919
}
2020

2121
// Plugin constants
22-
define( 'ACF_BLOCKS_VERSION', '2.4.1' );
22+
define( 'ACF_BLOCKS_VERSION', '2.5.0' );
2323
define( 'ACF_BLOCKS_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
2424
define( 'ACF_BLOCKS_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
2525
define( 'ACF_BLOCKS_PLUGIN_FILE', __FILE__ );

blocks/callout/template.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,11 @@
2828
}
2929

3030
// Get ACF fields for styling
31-
$iconImage = acf_blocks_get_field('callout_iconImage', $block);
31+
$iconImageRaw = acf_blocks_get_field('callout_iconImage', $block);
32+
$iconResolved = acf_blocks_resolve_image( $iconImageRaw, '', 'medium' );
33+
$iconImage = $iconResolved['src'];
34+
$iconSrcset = $iconResolved['srcset'];
35+
$iconSizes = $iconResolved['sizes'];
3236
$labelText = acf_blocks_get_field('callout_label', $block);
3337
$labelPosition = acf_blocks_get_field('callout_label_position', $block) ?: 'top';
3438
$bgColor = acf_blocks_get_field('callout_bgColor', $block);
@@ -235,7 +239,7 @@
235239
<?php endif; ?>
236240
<?php if (!empty($iconImage) && $labelPosition === 'top') : ?>
237241
<div class="acf-callout-icon-image">
238-
<img src="<?php echo esc_url($iconImage); ?>" alt="" loading="lazy" />
242+
<img src="<?php echo esc_url($iconImage); ?>" alt=""<?php if ( $iconSrcset ) : ?> srcset="<?php echo esc_attr($iconSrcset); ?>" sizes="<?php echo esc_attr($iconSizes); ?>"<?php endif; ?> loading="lazy" />
239243
</div>
240244
<?php endif; ?>
241245

blocks/feature-grid-block/feature-grid-block.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -291,10 +291,22 @@
291291
<div class="acf-feature-item">
292292
<?php if (!empty($feature['acf_feature_icon']) || !empty($feature['acf_feature_image'])) : ?>
293293
<div class="acf-feature-icon-wrapper">
294-
<?php if (!empty($feature['acf_feature_image'])) : ?>
294+
<?php if (!empty($feature['acf_feature_image'])) :
295+
$feat_img = $feature['acf_feature_image'];
296+
$feat_srcset = '';
297+
$feat_sizes = '';
298+
if ( ! empty( $feat_img['ID'] ) ) {
299+
$feat_srcset_val = wp_get_attachment_image_srcset( (int) $feat_img['ID'], 'medium' );
300+
if ( $feat_srcset_val ) {
301+
$feat_srcset = $feat_srcset_val;
302+
$feat_sizes = wp_get_attachment_image_sizes( (int) $feat_img['ID'], 'medium' ) ?: '';
303+
}
304+
}
305+
?>
295306
<div class="acf-feature-image">
296-
<img src="<?php echo esc_url($feature['acf_feature_image']['url']); ?>"
297-
alt="<?php echo esc_attr($feature['acf_feature_image']['alt']); ?>"
307+
<img src="<?php echo esc_url($feat_img['url']); ?>"
308+
alt="<?php echo esc_attr($feat_img['alt']); ?>"
309+
<?php if ( $feat_srcset ) : ?>srcset="<?php echo esc_attr($feat_srcset); ?>" sizes="<?php echo esc_attr($feat_sizes); ?>"<?php endif; ?>
298310
loading="lazy" decoding="async" />
299311
</div>
300312
<?php elseif (!empty($feature['acf_feature_icon'])) : ?>

blocks/gallery-block/gallery-block.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@
5454
class="acf-gallery-link"
5555
data-lightbox="gallery"
5656
data-title="<?php echo esc_attr( $image_alt ); ?>">
57-
<img src="<?php echo esc_url( $display_url ); ?>" alt="<?php echo esc_attr( $image_alt ); ?>" loading="<?php echo esc_attr( $loading_attr ); ?>" decoding="async" />
57+
<img src="<?php echo esc_url( $display_url ); ?>" alt="<?php echo esc_attr( $image_alt ); ?>"<?php if ( ! empty( $resolved['srcset'] ) ) : ?> srcset="<?php echo esc_attr( $resolved['srcset'] ); ?>" sizes="<?php echo esc_attr( $resolved['sizes'] ); ?>"<?php endif; ?> loading="<?php echo esc_attr( $loading_attr ); ?>" decoding="async" />
5858
<div class="acf-gallery-overlay">
5959
<span class="acf-gallery-icon">🔍</span>
6060
</div>
6161
</a>
6262
<?php else : ?>
63-
<img src="<?php echo esc_url( $display_url ); ?>" alt="<?php echo esc_attr( $image_alt ); ?>" loading="<?php echo esc_attr( $loading_attr ); ?>" decoding="async" />
63+
<img src="<?php echo esc_url( $display_url ); ?>" alt="<?php echo esc_attr( $image_alt ); ?>"<?php if ( ! empty( $resolved['srcset'] ) ) : ?> srcset="<?php echo esc_attr( $resolved['srcset'] ); ?>" sizes="<?php echo esc_attr( $resolved['sizes'] ); ?>"<?php endif; ?> loading="<?php echo esc_attr( $loading_attr ); ?>" decoding="async" />
6464
<?php endif; ?>
6565

6666
<?php if ( $image_caption ) : ?>

blocks/hero-block/hero-block.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
// Determine image source - direct URL takes priority, then resolve uploaded image
1919
$img_src = '';
2020
$img_alt = 'Hero image';
21+
$resolved = [ 'srcset' => '', 'sizes' => '' ];
2122
if ( $image_url ) {
2223
$img_src = $image_url;
2324
} elseif ( $image ) {
@@ -65,7 +66,7 @@
6566
<div class="acf-hero-block<?php echo $custom_class; ?>"<?php echo $inline_style_attr; ?>>
6667
<?php if ( $img_src ) : ?>
6768
<div class="acf-hero-image">
68-
<img src="<?php echo esc_url( $img_src ); ?>" alt="<?php echo esc_attr( $img_alt ); ?>" fetchpriority="high" decoding="async" />
69+
<img src="<?php echo esc_url( $img_src ); ?>" alt="<?php echo esc_attr( $img_alt ); ?>"<?php if ( ! empty( $resolved['srcset'] ) ) : ?> srcset="<?php echo esc_attr( $resolved['srcset'] ); ?>" sizes="<?php echo esc_attr( $resolved['sizes'] ); ?>"<?php endif; ?> fetchpriority="high" decoding="async" />
6970
</div>
7071
<?php endif; ?>
7172

blocks/opinion-box/opinion-box.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
// Determine image source - direct URL takes priority
88
$img_src = '';
99
$img_alt = $name ?: 'Author';
10+
$resolved = [ 'srcset' => '', 'sizes' => '' ];
1011
if ( $avatar_url ) {
1112
$img_src = $avatar_url;
1213
} elseif ( $avatar ) {
@@ -24,7 +25,7 @@
2425
<div class="acf-opinion-box-meta">
2526
<?php if($img_src): ?>
2627
<div class="acf-opinion-box-avatar">
27-
<img src="<?php echo esc_url($img_src); ?>" alt="<?php echo esc_attr($img_alt); ?>" class="acf-opinion-box-avatar-image" loading="lazy" />
28+
<img src="<?php echo esc_url($img_src); ?>" alt="<?php echo esc_attr($img_alt); ?>"<?php if ( ! empty( $resolved['srcset'] ) ) : ?> srcset="<?php echo esc_attr( $resolved['srcset'] ); ?>" sizes="<?php echo esc_attr( $resolved['sizes'] ); ?>"<?php endif; ?> class="acf-opinion-box-avatar-image" loading="lazy" />
2829
</div>
2930
<?php endif; ?>
3031

blocks/pl-block/pl-block.php

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,16 @@
3131
// Resolve image source — direct URL takes priority over uploaded image
3232
$img_src = '';
3333
$img_alt = $product_name ?: 'Product';
34+
$img_srcset = '';
35+
$img_sizes = '';
3436
if ($image_url) {
3537
$img_src = $image_url;
36-
} elseif ($icon && is_array($icon)) {
37-
$img_src = $icon['url'] ?? '';
38-
$img_alt = !empty($icon['alt']) ? $icon['alt'] : $img_alt;
38+
} elseif ($icon) {
39+
$resolved_img = acf_blocks_resolve_image( $icon, $img_alt, 'medium' );
40+
$img_src = $resolved_img['src'];
41+
$img_alt = $resolved_img['alt'];
42+
$img_srcset = $resolved_img['srcset'];
43+
$img_sizes = $resolved_img['sizes'];
3944
}
4045

4146
// Block wrapper attributes
@@ -50,7 +55,7 @@
5055

5156
<?php if ($img_src) : ?>
5257
<div class="acf-pl-block__icon">
53-
<img src="<?php echo esc_url($img_src); ?>" alt="<?php echo esc_attr($img_alt); ?>" loading="lazy" decoding="async" style="width:<?php echo esc_attr($width_style); ?>;height:auto;" />
58+
<img src="<?php echo esc_url($img_src); ?>" alt="<?php echo esc_attr($img_alt); ?>"<?php if ( $img_srcset ) : ?> srcset="<?php echo esc_attr($img_srcset); ?>" sizes="<?php echo esc_attr($img_sizes); ?>"<?php endif; ?> loading="lazy" decoding="async" style="width:<?php echo esc_attr($width_style); ?>;height:auto;" />
5459
</div>
5560
<?php endif; ?>
5661

blocks/product-box/extra.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ function acf_product_box_register_image_size() {
3535
* @return array{src: string, alt: string}
3636
*/
3737
function acf_product_box_resolve_image( $image, $image_url, $alt = 'Product image', $size = 'product-box-image' ) {
38-
$result = [ 'src' => '', 'alt' => $alt ];
38+
$result = [ 'src' => '', 'alt' => $alt, 'srcset' => '', 'sizes' => '' ];
3939

4040
// Case 1: Direct URL provided
4141
if ( $image_url ) {
@@ -62,6 +62,7 @@ function acf_product_box_resolve_image( $image, $image_url, $alt = 'Product imag
6262
if ( $img_alt ) {
6363
$result['alt'] = $img_alt;
6464
}
65+
$result = acf_blocks_attach_srcset( $result, $attachment_id, $size );
6566
}
6667
}
6768
// External URL: use as-is (no size manipulation)
@@ -100,6 +101,7 @@ function acf_product_box_resolve_image( $image, $image_url, $alt = 'Product imag
100101
}
101102
}
102103
}
104+
$result = acf_blocks_attach_srcset( $result, $attachment_id, $size );
103105
return $result;
104106
}
105107

blocks/product-box/product-box.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@
4444
$resolved_image = acf_product_box_resolve_image( $image, $image_url, $title ?: 'Product image', $image_size );
4545
$img_src = $resolved_image['src'];
4646
$img_alt = $resolved_image['alt'];
47+
$img_srcset = $resolved_image['srcset'] ?? '';
48+
$img_sizes = $resolved_image['sizes'] ?? '';
4749

4850
// Fallback to no-image layout when no image is available
4951
if ( ! $img_src && ! $is_no_image ) {
@@ -69,14 +71,14 @@
6971

7072
<?php if ($is_top_image && $img_src) : ?>
7173
<div class="acf-product-box__hero-image">
72-
<img src="<?php echo esc_url($img_src); ?>" alt="<?php echo esc_attr($img_alt); ?>" loading="lazy" decoding="async" />
74+
<img src="<?php echo esc_url($img_src); ?>" alt="<?php echo esc_attr($img_alt); ?>"<?php if ( $img_srcset ) : ?> srcset="<?php echo esc_attr($img_srcset); ?>" sizes="<?php echo esc_attr($img_sizes); ?>"<?php endif; ?> loading="lazy" decoding="async" />
7375
</div>
7476
<?php endif; ?>
7577

7678
<div class="acf-product-box__layout">
7779
<?php if (!$is_no_image && !$is_top_image && $img_src) : ?>
7880
<div class="acf-product-box__image">
79-
<img src="<?php echo esc_url($img_src); ?>" alt="<?php echo esc_attr($img_alt); ?>" loading="lazy" decoding="async" />
81+
<img src="<?php echo esc_url($img_src); ?>" alt="<?php echo esc_attr($img_alt); ?>"<?php if ( $img_srcset ) : ?> srcset="<?php echo esc_attr($img_srcset); ?>" sizes="<?php echo esc_attr($img_sizes); ?>"<?php endif; ?> loading="lazy" decoding="async" />
8082
</div>
8183
<?php endif; ?>
8284

blocks/product-cards/product-cards.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@
1515
$title_bg_color = acf_blocks_get_field('pc_block_title_bg_color', $block) ?: '#007bff';
1616
$title_tag_raw = acf_blocks_get_field('pc_block_title_tag', $block);
1717
$title_tag = in_array($title_tag_raw, ['p', 'h2', 'h3', 'h4', 'h5', 'h6'], true) ? $title_tag_raw : 'p';
18-
$image = acf_blocks_get_field('pc_block_product_image', $block);
18+
$image_raw = acf_blocks_get_field('pc_block_product_image', $block);
19+
$resolved_img = acf_blocks_resolve_image( $image_raw, $title ?: 'Product', 'medium' );
20+
$image = $resolved_img['src'];
21+
$image_srcset = $resolved_img['srcset'];
22+
$image_sizes = $resolved_img['sizes'];
1923
$description = acf_blocks_get_field('pc_block_description', $block);
2024
$root_class = acf_blocks_get_field('pc_block_root_class', $block);
2125
$button_text = acf_blocks_get_field('pc_block_button_text', $block);
@@ -40,7 +44,7 @@
4044
</div>
4145
<?php if ($image): ?>
4246
<div class="acf-product-cards__image">
43-
<img src="<?php echo esc_url($image); ?>" alt="<?php echo esc_attr($title); ?>" loading="lazy" decoding="async" />
47+
<img src="<?php echo esc_url($image); ?>" alt="<?php echo esc_attr($title); ?>"<?php if ( $image_srcset ) : ?> srcset="<?php echo esc_attr($image_srcset); ?>" sizes="<?php echo esc_attr($image_sizes); ?>"<?php endif; ?> loading="lazy" decoding="async" />
4448
</div>
4549
<?php endif; ?>
4650
<div class="acf-product-cards__content">

0 commit comments

Comments
 (0)