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)