Critical: Self-hosted videos never played — ACF compat layer returned raw numeric attachment IDs from $block['data'], but the template expected arrays with url and mime_type keys. Now resolves IDs via wp_get_attachment_url() /…
Read full notes25 changes
What's Changed
Fixed
Critical: Self-hosted videos never played — ACF compat layer returned raw numeric attachment IDs from $block['data'], but the template expected arrays with url and mime_type keys. Now resolves IDs via wp_get_attachment_url() / get_post_mime_type(), which also enables CDN URL rewriting.
Critical: Poster image for self-hosted videos had the same numeric ID issue. Now resolved via acf_blocks_resolve_image().
Controls toggle ignored: Strict comparison $controls !== false was always truthy for ACF's 0 value. Changed to truthy check.
Video cropping: Changed object-fit from cover to contain for self-hosted <video> elements to prevent content cropping.
Added
Self-hosted video URL support: The Video URL field now appears for self-hosted type, allowing direct/CDN URLs that override the media library file upload.
Lazy-load self-hosted videos: Non-autoplay self-hosted videos defer network requests until near the viewport via IntersectionObserver (200px root margin).
Smarter preload: Self-hosted videos with a poster image and no autoplay use preload="none" instead of preload="metadata" for faster page loads.
Commits
v2.2.5: Self-hosted video URL support, lazy-loading, and performance improvements (af0dba3)
fix resolve self-hosted video playback broken by compat layer returning raw attachment IDs (e4608fc)
Check for Updates button: License page now shows an Updates card with a "Check for Updates" button (when license is active) that queries the license server and reports whether a new version is available. Mirrors the GT Link Manager…
Read full notes18 changes
What's Changed
Added
Check for Updates button: License page now shows an Updates card with a "Check for Updates" button (when license is active) that queries the license server and reports whether a new version is available. Mirrors the GT Link Manager implementation.
Force update check runs automatically after license activation.
Commits
v2.2.4: Add Check for Updates button to license page (87311e7)
Critical: Images uploaded via media library showed placeholder SVG instead of actual image in product-box, hero, team-member, testimonial, opinion-box, gallery, and url-preview blocks. The ACF compat layer returns raw attachment IDs from…
Read full notes26 changes
What's Changed
Fixed
Critical: Images uploaded via media library showed placeholder SVG instead of actual image in product-box, hero, team-member, testimonial, opinion-box, gallery, and url-preview blocks. The ACF compat layer returns raw attachment IDs from $block['data'], but templates expected ACF-formatted arrays. Added shared acf_blocks_resolve_image() helper in compat layer that handles arrays, numeric IDs, and URL strings.
Product List Block: Fixed broken repeater sub-field names (pl_price_label instead of pl_block_pricing_title) that caused pricing, coupons, and buttons to never render.
Product List Block: Fixed unsanitized description output (XSS risk) — now uses wp_kses_post().
Added
Title Heading Level: Added configurable heading tag (p/h2-h6, default p) to product-box, product-cards, product-review, and pl-block.
Product List Block: Complete overhaul — modern card design with CSS custom properties, container queries, dark mode, rank badge, pricing chips, dashed-border coupon codes, 3-tier button system (primary/secondary/text), accessibility support.
Product List Block: New fields — image URL (external images), product URL (linked name), button style selector, image width override.
Shared Image Helper:acf_blocks_resolve_image() in compat layer resolves ACF image values (array, numeric ID, URL) to {src, alt} with size support.
Changed
Product-cards title now wrapped in configurable HTML tag instead of bare text in header div.
Commits
v2.2.3: Fix image rendering across 7 blocks, overhaul pl-block, add title heading level selector (a301dd5)
Critical: Prioritize $block['data'] over get_field() in compat layer. ACF 6.7+ get_field() was intercepting field_ prefixed keys and returning empty values, causing pros-cons and accordion blocks to render empty shells on review CPTs.
Read full notes19 changes
What's Changed
Fixed
Critical: Prioritize $block['data'] over get_field() in compat layer. ACF 6.7+ get_field() was intercepting field_ prefixed keys and returning empty values, causing pros-cons and accordion blocks to render empty shells on review CPTs.
Extracted acf_blocks_cast_field_value() helper to reduce code duplication in repeater type casting.
Commits
chore: bump to 2.1.8, add CHANGELOG.md, improve release workflow (2e36914)
fix prioritize block data over get_field() in compat layer (ddc487b)
Add field_ prefix fallback in acf_blocks_get_field() and acf_blocks_get_repeater() for review CPTs that store block data with ACF field key format (field_pc_pros_list instead of pc_pros_list).
Read full notes2 changes
Fixed
Add field_ prefix fallback in acf_blocks_get_field() and acf_blocks_get_repeater() for review CPTs that store block data with ACF field key format (field_pc_pros_list instead of pc_pros_list).