Skip to content
Gaurav TiwariChangelog

Plugin changelog

GT ACF Blocks Plugin

Reusable content and product blocks with ACF fields and conditional assets.

Latest
2.13.1
Releases
105
Updated
October 18, 2026

105 releases

  1. Stable

    2.13.1

    Security: Webhook credentials stay on the server. Public forms submit a signed reference to current saved settings; private, removed, and changed configurations are rejected. Webhook requests require HTTPS and never follow redirects.

    Read full notes 19 changes
    • Security Webhook credentials stay on the server. Public forms submit a signed reference to current saved settings; private, removed, and changed configurations are rejected. Webhook requests require HTTPS and never follow redirects.
    • Security URL Preview checks image dimensions through bounded safe HTTP requests. Image localization rejects SVGs and invalid cached images and removes failed new imports.
    • Security Star Rating ignores untrusted proxy headers by default. PHP_CodeSniffer is updated to 3.13.6, fixing the development dependency advisory.
    • Security Structured data safely encodes script examples in TOC, Product Review, and Star Rating fields. URL Preview imports require permission to edit their parent post.
    • Fixed WordPress base/contrast palette colors take precedence over operating-system fallbacks, keeping light themes readable on a dark OS and dark theme palettes readable on a light OS. Explicit theme color variables retain priority.
    • Fixed Featured URL Preview secondary actions keep their outline background and readable hover state, and card borders stay inside their declared width.
    • Fixed Changelog date-picker values use their registered display format instead of showing raw eight-digit storage values.
    • Fixed Background image updates preserve concurrent editor saves and queue additions. Migration mutations coordinate their workers, preserve exact verified restore points, retain failed restores for retry, and honor cancellation.
    • Fixed Migration parsing preserves comment examples inside JSON; recovery preserves escaped text, and Settings/cron load the same recovery helpers as WP-CLI.
    • Fixed Field compatibility resolves registered keys and recursively normalizes nested and flattened groups/repeaters. Changelog descriptions/types and marketing rows survive; half-star feature ratings keep their decimals.
    • Fixed Compare preserves legacy feature lists per row. A secondary-only CTA and a zero pricing amount render correctly. Missing-manifest discovery registers field groups.
    • Fixed Checklist state is scoped to its page and block, and interaction/progress work when browser storage is unavailable.
    • Fixed Email forms retain hidden fields and custom field attributes. Multiple webhook authentication headers remain separate.
    • Fixed TOC links, heading anchors, active-state tracking, and schema use the same rendered heading inventory, including HTML and reusable content, without overwriting custom anchors.
    • Fixed Gallery's lightbox setting opens an accessible dialog with keyboard support and focus restoration. URL Preview imports select the imported image in the originating field.
    • Fixed Failed remote license deactivation preserves local credentials and reports the error.
    • Fixed Changed block scripts receive the plugin's cache version even when block metadata carries an older version. Malformed numeric ratings cannot allocate unbounded star markup, and editor repeater reconstruction follows actual stored rows.
    • Upgrade notes Purge cached webhook form pages and rotate authentication credentials used with earlier versions, which included those values in public HTML. New signed form references do not expire with a page cache.
    • Upgrade notes Existing localized SVG files are not deleted automatically; review previously imported SVGs before continuing to serve them. Safe background content updates require an InnoDB posts table and defer when another integration owns a database transaction.
  2. Stable

    2.13.0

    Blocks saved by 2.12.x render with the same classes and the same visible colors, with three intentional exceptions: a checklist whose background is still the old #f9fafb default follows the theme surface; a true/false stored as "0" is treated as off; and an unsafe color or custom HTML tag is dropped rather than printed. New hero, CTA, and marketing fields do nothing when they are empty.

    Read full notes 13 changes
    • Changed Blocks use the Tabler visual language. Cards, buttons, badges, type, radius, and shadows follow Tabler 1.4 (~/tabler, tabler.css and tabler-marketing.css): system sans, 14px controls, 6px buttons, 8px cards, a 1px border, and a soft card shadow. Colors still come from the theme, so Marketers Delight’s [data-theme] toggle and a dark operating system keep driving light and dark. Tabler’s own palette is only the fallback when a theme variable is missing.
    • Fixed Dark text on dark surfaces. Hero and CTA text was inherited, so a dark heading color could sit on a dark card or photo. Thread’s light style pinned #0f1419 while its background followed the theme. URL preview’s featured gradient ended on a light blue, and its dark style painted field values with the border color. Post display and feature grid dark styles used muted and border tokens that stay dark on a fixed dark panel. Filled buttons that used the theme primary, or white text on a text-colored fill, now use the button fill with the text color that belongs on it. A product box badge picks dark or light text from its background.
    • Added Pricing, Logo Cloud, Steps, and Trust Bar. Four marketing blocks for landing pages: plan cards with one highlighted tier, a logo row (with an optional grayscale style), a numbered “how it works” sequence, and a strip of guarantees. Every field is optional. They register in a new ACF Marketing inserter category and do not change how existing blocks are stored or rendered.
    • Added Hero image position. Background (the original cover image), left, right, or stacked. An empty or Background value keeps the previous markup, with no extra class. An optional overlay color is printed only on the background layout, and only when a color is set.
    • Added CTA alignment and a second button. Centered text is unchanged. Left or right adds a modifier class. A second classic button renders only when it has both a label and a URL. “Open in a new tab” adds target and rel only when it is switched on, for both the hero and CTA classic buttons.
    • Fixed Colors in style attributes are limited to real color values. Section, callout, CTA, product cards, compare, product box badges, and the thread connector previously printed the picker value after HTML escaping, which still allowed a second CSS declaration. Hex (including 4- and 8-digit), rgb()/hsl(), transparent, and currentColor pass through. The product box badge, product card header, and thread connector keep their previous fallback colors when the field is empty.
    • Fixed Section custom tags can no longer open another element. A custom tag is accepted only as a single tag name. script, svg, and values such as img src=x fall back to section. Ordinary tags such as article and blockquote still work.
    • Fixed Checklist cards no longer pin a light panel in dark mode. The old #f9fafb background was written inline, so it beat the theme token. That legacy value is now omitted. A color an editor actually chose is still written. The green accent default (#16a34a) is unchanged, including when the field is empty.
    • Fixed ACF true/false values of "0" are off. A plain boolean cast treats the string "0" as true, so an unchecked checklist item, an unchecked “verified” mark, and the checklist toggles could render as on. "1", 1, and true still mean on.
    • Fixed Stats stay at their real number until the count-up starts. The script used to set every value to 0 before the block scrolled into view, so a stat that never intersected (a closed disclosure, print, or a missed observer) stayed at 0. Numbers with thousands separators also count the full value. Blocks added after the first paint, including infinite scroll, start the same way.
    • Fixed Coupon copy no longer depends on an inline handler. The button stores the code in data-code, and a conditional view script copies it. If the async clipboard is denied, it falls back to a textarea selection instead of failing silently.
    • Fixed Opacity colors such as rgba(0, 0, 0, 1.0) stay applied. The color check treated 1.0 as invalid, so a fully opaque picker value on a section or hero overlay was dropped.
    • Fixed Pricing and steps no longer leave an empty column. Fewer plans than the chosen column count use only the columns they need, and a step sequence sizes itself to the steps. Blank repeater rows are skipped. A marketing block with nothing to show does not print an empty section. Two classic CTA buttons wrap instead of colliding.
  3. Stable

    2.12.2

    All notable changes to the ACF Blocks plugin are documented here.

    Read full notes 10 changes
    • Fixed Video facades request YouTube's 1280 × 720 thumbnail instead of the 480 × 360 image. The image fills the default 16:9 frame without theme image rules changing its height. Videos without an HD thumbnail fall back to the available image.
    • Fixed YouTube players send the embedding site's origin using an explicit referrer policy. Editor previews use a normal document on the site because the editor's blob canvas cannot send an HTTP referrer, which causes Error 153. Previews load eagerly; autoplay and click-to-play embeds also carry the policy.
    • Fixed Email Form control styles are scoped to the form, so the shared .acf-input class no longer adds padding, borders or backgrounds to ACF inspector fields.
    • Fixed Site-specific editor stylesheets saved by Block Manager regenerate after a plugin update so stale inspector styles do not survive in the uploads directory.
    • Fixed Shorts, live, privacy-enhanced YouTube URLs, and Vimeo player/channel/group URLs render correctly. Vimeo unlisted privacy hashes and YouTube share timestamps are preserved; missing controls settings keep controls enabled, and Vimeo honors the controls switch.
    • Fixed Videos inserted by AJAX initialize correctly, and lazy loading leaves other plugins' videos alone. Invalid provider URLs show an explanatory editor placeholder.
    • Fixed Email Form labels follow custom input IDs. Boolean attributes retain their state in ACF's editor preview, including hidden form and star-rating messages, inactive tab panels, required inputs, and video playback settings.
    • Fixed Editor stylesheets are written atomically, recently generated bundles are retained during overlapping requests, and missing or stale settings bundles are rebuilt.
    • Changed Video facade and lazy-load behavior is loaded through the block's conditional viewScript asset instead of an inline script. Players have accessible titles and intrinsic widescreen dimensions.
    • Changed Release tags are checked against version metadata, generated assets and tests before packaging. Development dependencies are excluded from the upload ZIP.
  4. Stable

    2.12.1

    Pros & Cons: unreadable in dark mode. The template filled every empty color field with a light hex value (#f0fdf4, #fef2f2 and dark titles) and wrote all eight into the block's inline style. An inline custom property beats the…

    Read full notes 18 changes
    • What's Changed
    • Fixed
    • Pros & Cons: unreadable in dark mode. The template filled every empty color field with a light hex value (#f0fdf4, #fef2f2 and dark titles) and wrote all eight into the block's inline style. An inline custom property beats the stylesheet, so the token fallbacks in pros-cons.css, which mix the theme's background, text, success and danger colors and already follow dark mode, never ran. In dark mode the list text turned light while the columns stayed near-white: 1.2:1 contrast against the 4.5:1 that WCAG AA asks for. The block now writes only the colors an editor actually chose and leaves out the style attribute when there are none. On a dark theme the columns measure 11.8:1 for text, 7.1:1 or better for titles and 5.9:1 or better for icons. In light mode they look the same as before, except that the pros column takes the theme's success color instead of a fixed green.
    • The eight color fields no longer default to those light values, so a newly inserted block doesn't save them into its data. Blocks that already carry one of the old defaults (#f0fdf4, #16a34a, #166534, #fef2f2, #dc2626, #991b1b) are treated as uncustomized and follow the theme too. Any other custom color still applies exactly as set, in both modes.
    • Commits
    • 2.12.1: Pros & Cons follows the theme into dark mode (95d1665)
    • Stats
    • Commits: 1
    • Changes 9 files changed, 156 insertions(+), 46 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  5. Stable

    2.12.0

    Every field added in 2.12.0 is optional and off when empty. Rendering blocks saved by 2.11.x through the new template gives the same markup with one exception: the price, discount and price note are now wrapped in…

    Read full notes 53 changes
    • What's Changed
    • Fixed
    • Product Box: the Top Image style cropped the product. The hero was forced into a 16:9 frame with object-fit: cover, so a tall or square product lost its top and bottom, and a very wide one lost its sides. The hero now shows the whole image (contain) at the image's own shape, capped at 420px tall (260px on phones).
    • Product Box: every image was the full-size original. The template asked for product-box-image (550×550) and product-box-wide (800×450), but extra.php registered those sizes on after_setup_theme and is itself loaded on acf/init, after that hook has fired. The sizes were never generated, so WordPress fell back to the original upload: a 3000px photo went into a 300px column. The side image now uses core's medium_large (768px) and the Top Image large (1024px), both uncropped and with srcset. The dead size registration is removed, so no extra files are generated per upload.
    • The corner badge no longer overlaps a long title or the new label in the default and No Image styles. Above a contained Top Image, above a stacked side image on phones, and above a No Image box on phones, it gets its own strip instead of covering the product or squeezing the title.
    • Two phone-width rules never applied: the smaller badge and the smaller price lost to the higher-specificity base selectors. Both now take effect.
    • The CSS minifier broke descendant selectors that start with a colon. tools/build-assets.php dropped whitespace before every :, so .box :is(*, ::before) shipped as .box:is(*, ::before), which matches the box itself instead of what's inside it. The source files were right and only the .min.css files the plugin actually serves were wrong. Rules that were silently dead in production now apply as written: The space before : is now always kept (it costs a byte in the rare color : red and never changes meaning), and three regression cases cover it.
    • Added
    • Image Fit (Display tab): "Show full image" (default) or "Fill & crop". Fill & crop restores the old cropped look: a square frame in the side layout, and an edge-to-edge image in Top Image. Cropping is CSS-only, so the full image is always what's downloaded.
    • Top Image Frame (Display tab): Auto (the image's own shape), 16:9, 4:3 or 1:1, so several Top Image boxes in a grid line up. With "Show full image" the product sits inside the frame; with "Fill & crop" it fills it.
    • Highlight Label: a pill above the title ("Best Overall", "Editor's Choice"). Setting it also gives the box an accent border so the pick stands out in a list.
    • Open Links in New Tab: applies to the title, image and button links, and adds rel="noopener" without duplicating tokens already present.
    • Title & Image Link Rel: the title link had no rel at all, so an affiliate URL in the title shipped without sponsored. It now takes its own rel value.
    • Disclosure: optional small print under the buttons for affiliate disclosures.
    • The rating now shows its number (for example, 4.5) next to the stars. Screen readers get one label on the stars instead of an aria-label on a plain div, which most of them ignore.
    • The Top Image hero links to the title URL, like the side image always has.
    • Images served from the media library carry width and height, so the box no longer jumps when the image loads.
    • Rank: a "#1", "#2" tile beside the title for "best of" lists.
    • Review Score: your own score as a ring beside the title, out of 10, 5 or 100, with an editable label ("Our score" by default). Screen readers get one label: "Our score: 9.2 out of 10".
    • Verdict: a one-line "Why it wins" callout above the features, with an editable label.
    • Spec Chips: up to eight short facts (49", 144Hz) as pills under the title.
    • "You save" amount: worked out from Original and Current Price and printed in the current price's own format ("$60.57", "₹1,20,000" with Indian grouping, "300,00 €"). It stays hidden rather than guessing when either price isn't a plain amount ("Free", "From $99", "$9.99/mo") or the two use different currencies.
    • Price Checked On: a date under the price, shown in the site's date format inside a <time> element. Amazon's Associates rules expect displayed prices to carry one.
    • Perks: up to six icon-and-text items (shipping, returns, warranty, secure, deal, fast, gift, check). The icons are inline SVG, so they don't depend on the theme's icon font.
    • Amazon Yellow button style.
    • Emphasize First Button: the first button gets larger and filled with the accent color, and the rest become outlines. Amazon Yellow and Custom buttons keep their own colors.
    • Arrow on First Button: an arrow that nudges forward on hover or keyboard focus.
    • Shine on First Button: Off, On hover, or Repeat (a sweep every few seconds, which also works on phones). The shine is its own element, so it can't collide with theme icon classes like md-icon-external that use ::before or ::after.
    • Box Style: Spotlight: a gradient border, a soft accent tint at the top and an accent glow. On browsers that support relative colors, the gradient's second color is derived from the accent.
    • Accent Color: one color for the label, rank, score ring, verdict, Spotlight border, primary buttons and discount chip. The text on it is picked automatically for contrast, and only #rgb/#rrggbb values reach the style attribute.
    • The field group is split into Product, Highlights, Price & Buttons, and Display tabs, and the score and verdict label fields only appear once a score or verdict is entered.
    • Tests for price parsing across US, Indian and European formats, the savings math, date handling, accent sanitizing and contrast, link attributes and image-size selection. Other tests assert that every new field is optional and defaults to off, and that the product box registers no image sizes of its own.
    • Compatibility: Every field added in 2.12.0 is optional and off when empty. Rendering blocks saved by 2.11.x through the new template gives the same markup with one exception: the price, discount and price note are now wrapped in .acf-product-box__price-block. All existing class names are unchanged.
    • Changed
    • In the bottom section, the description now sits above the price and buttons, which share one row. Before, the price, the price note, the description and the buttons were separate items in one wrapping row, so the price note and description floated between the price and the buttons, and the buttons often wrapped onto a line of their own.
    • Image frames are transparent. The gray panel behind the side and Top Image pictures is gone, so a product cutout (a transparent PNG or WebP) sits directly on the card, and the divider under the Top Image is gone with it. Images with their own background get 8px rounded corners.
    • Phone layout: a stacked side image is capped at 220px tall and a Top Image at 260px, so the title and price stay near the top of the screen. Buttons are full width with 44px touch targets and 14px text. Spacing is tighter, and the disclosure is centered under the buttons.
    • The image zoom on hover only runs on devices that can hover, so tapping on a phone no longer leaves the image stuck zoomed.
    • Button focus rings use :focus-visible, so they show for keyboard users and not after a mouse click.
    • Commits
    • 2.12.0: product box shows whole images, adds highlights and CTA options (daf752a)
    • Stats
    • Commits: 1
    • Changes 20 files changed, 1740 insertions(+), 163 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  6. Stable

    2.11.4

    Star Rating votes never saved. Since 2.9.0 the public acf-blocks/v1/ratings route used floatval as the sanitize_callback for rating and initialRating. WordPress calls sanitize callbacks with three arguments ($value, $request, $param), and…

    Read full notes 21 changes
    • What's Changed
    • Fixed
    • Star Rating votes never saved. Since 2.9.0 the public acf-blocks/v1/ratings route used floatval as the sanitize_callback for rating and initialRating. WordPress calls sanitize callbacks with three arguments ($value, $request, $param), and an internal PHP function given more arguments than it accepts throws ArgumentCountError on PHP 8 (PHP 7 warned and returned null, which the range check then rejected). Every submission failed before reaching storage: a 500 on PHP 8, a 400 on PHP 7. Both arguments now use acf_star_rating_sanitize_float(), which also turns non-numeric input, arrays included, into 0, so the existing 1 to 5 range check answers it with a 400 instead of counting it.
    • The Star Rating widget had no REST URL on block themes. The script was registered on wp_enqueue_scripts, but a block theme renders its template, and every block in it, before wp_head fires that hook. The render template's wp_localize_script() call hit an unregistered handle and returned false, and a static flag stopped later renders from retrying, so window.acfStarRating was never defined and the submit handler returned without sending anything. Registration and localization now happen once on init, and the template calls the same helper before enqueueing so renders outside the normal hook order are covered too. Classic themes, where wp_enqueue_scripts runs before the content, were only affected by the first bug.
    • Added
    • Regression tests: every sanitize callback on the ratings route must be a PHP function that tolerates WordPress's three arguments, and the Star Rating script must be registered and localized on init, with no localization left in the render template.
    • Commits
    • 2.11.4: fix Star Rating votes on PHP 8 and block themes (8676090)
    • docs add Buy Me a Coffee support links to README (2ebb43d)
    • Stats
    • Commits: 2
    • Changes 7 files changed, 140 insertions(+), 31 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  7. Stable

    2.11.3

    A block_type_metadata filter now sets version to ACF_BLOCKS_VERSION for blocks whose block.json lives inside this plugin, matching what the plugin's direct wp_enqueue_style() calls have always passed. Blocks that other plugins register…

    Read full notes 18 changes

    A block_type_metadata filter now sets version to ACF_BLOCKS_VERSION for blocks whose block.json lives inside this plugin, matching what the plugin's direct wp_enqueue_style() calls have always passed. Blocks that other plugins register under the acf/ namespace are left alone. Asset URLs now carry the plugin version and change with every release.

    Sites running GT Performance saw this compounded: its assetVersion filter rewrites ver when it equals the core version, turning ?ver=7.1 into a stable hash. It was doing its job — hiding the core version — but the versioning underneath was already wrong, and the hash made the staleness harder to spot.

    • What's Changed
    • Fixed
    • Block stylesheets were never cache-busted by a plugin release. Core's register_block_style_handle() reads $metadata['version'] from block.json and falls back to false, which makes wp_register_style() stamp the WordPress version onto the URL. Every one of this plugin's block.json-registered handles was therefore versioned by core, not by the plugin: on this site url-preview.min.css shipped as ?ver=7.1 for WordPress 7.1, and the files are served public, max-age=31536000. The query string is the only thing that can retire a year-long cached copy, so a CSS fix in a plugin release stayed invisible to every reader who had already loaded the page until WordPress itself updated. The 2.11.2 contrast fix was landing this way — correct on disk and at the CDN, still broken in the browser of anyone who had visited before.
    • Commits
    • 2.11.3: version block.json assets with the plugin, not with WP core (a91797b)
    • 2.11.2: fix white-on-white URL Preview button in dark mode (e40be8e)
    • Stats
    • Commits: 2
    • Changes 11 files changed, 82 insertions(+), 10 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  8. Stable

    2.11.2

    --acfb-text-invert keeps its meaning and its 41 remaining consumers across 17 stylesheets, all of which pair it with a saturated accent or brand fill where white is the correct choice. Redefining it for dark would have fixed these five…

    Read full notes 5 changes

    --acfb-text-invert keeps its meaning and its 41 remaining consumers across 17 stylesheets, all of which pair it with a saturated accent or brand fill where white is the correct choice. Redefining it for dark would have fixed these five rules and put those at risk, so it was left alone. Reach for --acfb-on-text whenever --acfb-text is the background, and --acfb-text-invert only on a brand-colored one.

    • Fixed
    • The URL Preview button was white-on-white in dark mode. .acf-url-preview__button fills with background:var(--acfb-text) and wrote its label in var(--acfb-text-invert). Those two are only inverses of each other in light mode: --acfb-text-invert aliases --color-button-text, which MD deliberately holds at white in both schemes so it stays legible on the saturated --color-button fill, while --acfb-text flips to a light value for dark. Measured on a live page, the button rendered #FFFFFF on #E4E4E4, a contrast ratio of 1.27:1 against the 4.5:1 AA floor, while light mode was fine at 16.09:1. The Featured variant inherited the same label color under an --acfb-text gradient fill. Seven published posts and pages carry URL Preview blocks; every button on them was affected.
    • Dark callouts had the same defect, latent. .acf-callout.is-style-dark also fills with --acfb-text and set its body text, its links, and its button links in --acfb-text-invert, so the box inverted into a light panel with white text wherever dark mode was on. No published post currently uses the variation, so nothing shipped broken, but the rule was wrong in the same way.
    • Added
    • --acfb-on-text, the companion to --acfb-text used as a background, mirroring how --acfb-on-primary companions --acfb-button. It resolves to --color-content-bg, which is the true inverse of --color-text and flips under both the [data-theme] toggle and the prefers-color-scheme fallback, so a single :root declaration covers both paths and no dark-mode override is required. The five affected rules now use it: the URL Preview button and its :hover, and the Dark callout's base, link, and button-link rules. Dark mode measures 13.69:1 after the change, light mode is untouched at 16.09:1.
  9. Stable

    2.11.1

    Callout labels ignored the colour the block was given, and every one of them failed contrast. .acf-callout-label carried a hardcoded color:#d4a600 that never varied with the block's own callout_bgColor or callout_textColor, and four style…

    Read full notes 21 changes
    • What's Changed
    • Fixed
    • Callout labels ignored the colour the block was given, and every one of them failed contrast. .acf-callout-label carried a hardcoded color:#d4a600 that never varied with the block's own callout_bgColor or callout_textColor, and four style variations replaced it with literals that were just as uncoupled. Across 501 labelled callouts on 272 posts, 500 of the 500 evaluable labels came in under 4.5:1 — none passed. The mustard sat at 2.17:1 on #f0fdf4 (172 blocks) and 2.09:1 on #eff6ff (131), and a "Warning" label on #f8d7da bottomed out at 1.70:1. The label now resolves to currentColor, inheriting the callout's own text colour, which authors already pick to pair with the background: 415 of 415 blocks carrying explicit colours now pass, and the 85 with none fall back to the theme's own --acfb-text on --acfb-bg pair. The Dark and Dashed Dark variants keep their --acfb-star label, which is token-based and already correct on a dark ground.
    • Custom border-color could not override a variation's border. Highlight, Dashed Light, and Dashed Dark set border as a shorthand, so a block supplying only callout_borderColor kept the variation's width and style and changed nothing but the hue — a Highlight callout with custom colours rendered a 3px dashed border it never asked for, on top of the 1px solid the base rule intended. The three variations now set border-width, border-style, and border-color as longhands so a per-block colour lands without dragging the rest of the shorthand with it.
    • Highlight and Testimonial opted out of dark mode. Both hardcoded their surface (#f0fff0 and #fdf6e3) instead of deriving it from --acfb-bg, so they stayed bright on a dark page while every other callout followed the theme. Both now tint the token with color-mix(), which reproduces the previous light-mode surface to within a couple of values and yields a correspondingly dark tint in dark mode. Highlight's → list marker keeps its green.
    • Notes
    • Callout registers style as an array in block.json, so WordPress inlines the bytes rather than linking a URL. There is no asset URL to bust here; page caches need a purge for the change to appear on already-cached HTML.
    • Commits
    • 2.11.1: callout labels inherit the block's text color (543e820)
    • Stats
    • Commits: 1
    • Changes 8 files changed, 25 insertions(+), 15 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  10. Stable

    2.11.0

    Inlined block stylesheets shipped unminified source. acf_blocks_minify_loader_src() only runs when a sheet is printed as a &lt;link&gt;. Styles registered from block.json also carry path data, and wp_maybe_inline_styles() reads that…

    Read full notes 19 changes
    • What's Changed
    • Fixed
    • Inlined block stylesheets shipped unminified source. acf_blocks_minify_loader_src() only runs when a sheet is printed as a &lt;link&gt;. Styles registered from block.json also carry path data, and wp_maybe_inline_styles() reads that file straight off disk and prints its bytes into the page without the URL ever reaching style_loader_src — so every page rendering one of those blocks carried the readable source. It hit the four blocks whose block.json declares style as an array (Callout, Feature Grid, Post Display, Table of Contents); a string style is pre-registered by acf_blocks_register_styles() under the handle WordPress would have generated, so core bails before attaching path. acf_blocks_minify_registered_styles() now rewrites both src and path on plugin-owned registrations before the inline pass. Rewriting the registration rather than the printed tag keeps the inlining, so pages still avoid the extra request and just carry less of it — measured on a published Table of Contents post, 2,279 inlined bytes down to 1,494.
    • ACF blocks now keep their baseline rhythm in the block editor. acf_blocks_register_layout_styles() attaches tokens.css and block-layout.css with wp_enqueue_block_style(), which only fires when a block renders on the front end — the editor canvas never received them. A heading following a Table of Contents block sat flush against it while editing and had 1.5rem of air once published. The sheets are now also enqueued on enqueue_block_assets in admin, the hook WordPress injects into the canvas document. Front-end delivery still goes through wp_enqueue_block_style(), so pages only pay for the sheets when a block is actually present.
    • block-layout.css matches the editor's markup. The front end renders the block element itself carrying .acf-block, while the editor wraps the same output in .wp-block and puts acf-block-component / acf-block-&lt;name&gt; on the wrapper — so .acf-block matched nothing inside the canvas even once the sheet loaded. The rule now carries a second selector for the wrapper. The two cannot match the same element, so the margin is never doubled. That second selector deliberately does not use :where(): the block editor sets its own margins on .wp-block elements, so a zero-specificity rule loses to them. Measured on a Table of Contents block followed by a heading — 0px with :where(), 24px without, against 24px on the published page.
    • Commits
    • 2.11.0: serve minified CSS for inlined block stylesheets (ae06e79)
    • Stats
    • Commits: 1
    • Changes 7 files changed, 212 insertions(+), 4 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  11. Stable

    2.10.2

    Collapsible TOC rendered a double border on themes that style &lt;details&gt; as a card. The block drew its own hairline frame and summary divider around the &lt;details&gt; element, so themes with disclosure-card styling…

    Read full notes 19 changes
    • What's Changed
    • Fixed
    • Collapsible TOC rendered a double border on themes that style &lt;details&gt; as a card. The block drew its own hairline frame and summary divider around the &lt;details&gt; element, so themes with disclosure-card styling (such as Marketers Delight) showed two nested borders. The render template now adds an acf-toc--collapsible modifier class, and the block stylesheet drops its frame, summary divider, and duplicate content padding for that variant, letting the theme's disclosure card own the chrome. Non-collapsible TOCs are unchanged.
    • Notes
    • blocks/toc-block/block.json now declares "version", so the enqueued stylesheet URL busts CDN caches on plugin updates.
    • Commits
    • 2.10.2: fix collapsible TOC double border on themes with details cards (55a1f59)
    • Stats
    • Commits: 1
    • Changes 9 files changed, 49 insertions(+), 12 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  12. Stable

    2.10.1

    Filled buttons were unreadable in 2.10.0. The 2.10.0 conversion mapped several filled controls to --acfb-surface-3, a light neutral, while leaving their text inverted white — so they rendered as pale text on a pale fill. Affected: the…

    Read full notes 21 changes
    • What's Changed
    • Fixed
    • Filled buttons were unreadable in 2.10.0. The 2.10.0 conversion mapped several filled controls to --acfb-surface-3, a light neutral, while leaving their text inverted white — so they rendered as pale text on a pale fill. Affected: the Product Box primary and Amazon buttons and its discount badge, the Product List primary button and rank chip, and the Coupon Code copy button.
    • Filled controls now use --acfb-button, which the theme guarantees pairs with --acfb-button-text. Measured 5.44:1 in both light and dark.
    • The Product Box Amazon button is now a readable neutral secondary (dark text on a light fill, 13.4–14.4:1) rather than a second full-strength fill, so the card keeps one primary action. Its hover no longer darkens toward the brand colour underneath dark text.
    • Notes
    • Added a regression test rejecting any filled control whose background is a --acfb-surface-* token while its paired text is --acfb-on-primary.
    • Commits
    • 2.10.1: fix unreadable filled buttons from the token conversion (79879cf)
    • Stats
    • Commits: 1
    • Changes 11 files changed, 63 insertions(+), 12 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  13. Stable

    2.10.0

    Design token bridge (assets/css/tokens.css). Every block now styles through --acfb-* tokens that resolve to Marketers Delight theme tokens when MD is active and to neutral literals otherwise. Dark mode follows the theme's own toggle with no…

    Read full notes 34 changes
    • What's Changed
    • Added
    • Design token bridge (assets/css/tokens.css). Every block now styles through --acfb-* tokens that resolve to Marketers Delight theme tokens when MD is active and to neutral literals otherwise. Dark mode follows the theme's own toggle with no per-block rules.
    • Build-time asset minification (tools/build-assets.php). Writes a .min sibling for every CSS and JS file; the enqueue layer serves it, SCRIPT_DEBUG serves the source, and a missing artifact falls back to the source rather than 404ing. composer build regenerates, composer generated (and CI) verifies freshness.
    • Keyboard support for the Tabs block: arrow keys, Home/End, and a roving tabindex, per the ARIA tabs pattern.
    • Changed
    • Tabs redesigned as a minimal segmented control. Tab buttons no longer carry wp-element-button, which had rendered every tab as a filled CTA button. Pills, underline and boxed variants retained.
    • Tabs behaviour moved out of an inline &lt;script&gt; into tabs.js, registered as the block's viewScript.
    • 797 hardcoded colours across the block stylesheets reduced to 89, all of which are deliberate (social brand colours, code-editor syntax themes, video letterboxing).
    • 54 hand-rolled [data-theme] override rules removed; the token layer handles both schemes.
    • Fixed
    • Video block rendered on the front end but not in the block editor. The player is absolutely positioned, so the wrapper's padding-bottom was the block's only source of height — if the stylesheet did not reach the editor the block collapsed to 0px and vanished. The aspect ratio is now carried inline, so the box survives with no CSS at all.
    • Pros & Cons is now dark-mode capable. It previously hardcoded dark text on light pink and green tints, which was unreadable on a dark background.
    • Semantic status labels (changelog, pricing) sat at 4.0–4.2:1 against their own tint, under the WCAG AA floor. They are now mixed toward the text colour.
    • Button fills used --color-primary, which MD lightens for dark mode, dropping white button text to 3.3:1. They now use --color-button, which MD keeps stable and guarantees pairs with --color-button-text.
    • Removed the rounded-container-plus-thick-coloured-rail treatment from the opinion box, video caption, compact URL preview and Pros & Cons.
    • Notes
    • Total shipped CSS dropped from ~291 KB to ~257 KB: deleting the dark-mode override rules more than pays for the token layer.
    • Every measured text/background pair passes WCAG AA in both light and dark (19 pairs across 14 block palettes, worst 5.44:1).
    • Commits
    • Correct 2.10.0 changelog date to release day (5fd652d)
    • 2.10.0: MD design tokens, minified assets, Tabs redesign (842f9da)
    • Stats
    • Commits: 2
    • Changes 91 files changed, 2655 insertions(+), 322 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  14. Stable

    2.9.6

    Kept the Table of Contents frame padding visually even under opinionated theme margins by normalizing only its outer title and list-edge spacing. Numbering, marker indentation, link treatment, and spacing between list items continue to…

    Read full notes 17 changes
    • What's Changed
    • Fixed
    • Kept the Table of Contents frame padding visually even under opinionated theme margins by normalizing only its outer title and list-edge spacing. Numbering, marker indentation, link treatment, and spacing between list items continue to inherit from the theme.
    • Commits
    • Release 2.9.6: fix TOC edge spacing (76543dd)
    • Stats
    • Commits: 1
    • Changes 6 files changed, 58 insertions(+), 4 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  15. Stable

    2.9.5

    What's Changed

    Read full notes 18 changes
    • What's Changed
    • Changed
    • Replaced the Table of Contents' thick rounded accent treatment with a quiet square hairline frame while retaining the title divider, active-state emphasis, semantic list styles, and theme inheritance.
    • Added a zero-specificity 1.5rem block-end spacing fallback to every rendered .acf-block; existing theme and block margins continue to take precedence.
    • Commits
    • Release 2.9.5: refine block spacing and TOC (803931a)
    • Stats
    • Commits: 1
    • Changes 10 files changed, 79 insertions(+), 13 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  16. Stable

    2.9.4

    Gave the theme-native Table of Contents a restrained currentColor frame, stronger leading edge, title divider, and modest inset spacing without restoring plugin backgrounds, hard-coded colors, fixed typography, or custom markers.

    Read full notes 17 changes
    • What's Changed
    • Changed
    • Gave the theme-native Table of Contents a restrained currentColor frame, stronger leading edge, title divider, and modest inset spacing without restoring plugin backgrounds, hard-coded colors, fixed typography, or custom markers.
    • Commits
    • Release 2.9.4: refine TOC styling (0230105)
    • Stats
    • Commits: 1
    • Changes 6 files changed, 61 insertions(+), 8 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  17. Stable

    2.9.3

    Optional semantic fallback styles for minimal themes. Settings → ACF Blocks License → Theme Compatibility Styles can load a small zero-specificity stylesheet for common semantic HTML inside ACF blocks. It is disabled by default and loads in…

    Read full notes 25 changes
    • What's Changed
    • Added
    • Optional semantic fallback styles for minimal themes. Settings → ACF Blocks License → Theme Compatibility Styles can load a small zero-specificity stylesheet for common semantic HTML inside ACF blocks. It is disabled by default and loads in both the editor and frontend only when enabled.
    • Every rendered acf/* block now exposes a predictable .acf-block class for theme authors, whether or not the fallback stylesheet is enabled.
    • Changed
    • The Table of Contents block now inherits its visual design from the active theme. Removed plugin-defined backgrounds, colors, borders, radii, fixed type sizing/casing, link decoration, hover fills, spacing, custom markers, dark-mode overrides, and scrollbar styling.
    • Numbered, bulleted, and plain list modes remain explicit. Ordered and unordered lists use native theme-aware markers, while plain lists stay marker-free.
    • Sticky positioning, smooth scrolling, reduced-motion handling, active-section emphasis, and heading scroll offsets remain intact.
    • The Accordion block is now entirely theme-native. Its native &lt;details&gt;/&lt;summary&gt; behavior needs no plugin stylesheet, so the CSS asset and metadata references were removed.
    • Tabs now ship only structural, state, accessibility, responsive, and style-mode rules. Removed the plugin palette, light/dark overrides, opacity system, decorative fills, transition effects, container spacing, and forced typography while retaining all four tab treatments and panel switching.
    • Section block CSS now covers structure only. Removed inactive default palette, dark-mode, width, spacing, and container rules. The template now emits its scoped wrapper and alignment classes so user-selected video and overlay backgrounds layer correctly without imposing a design.
    • Commits
    • Release 2.9.3: inherit theme block styles (9b681c3)
    • Stats
    • Commits: 1
    • Changes 24 files changed, 769 insertions(+), 113 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  18. Stable

    2.9.2

    The migrator now strips the retired FAQ-schema flag from existing content. 2.9.1 made acf_accord_enable_faq_schema inert; this removes it (and its _acf_accord_enable_faq_schema field reference) from acf/accordion blocks when the migrator…

    Read full notes 21 changes
    • What's Changed
    • Changed
    • The migrator now strips the retired FAQ-schema flag from existing content. 2.9.1 made acf_accord_enable_faq_schema inert; this removes it (and its _acf_accord_enable_faq_schema field reference) from acf/accordion blocks when the migrator runs, so old posts no longer carry a key nothing reads.
    • Removals are reported under their own Retired FAQ schema flag removed category in the scan breakdown and per-post badges, rather than being folded into "Accordion fields fixed".
    • Notes
    • Expect a one-time jump in the migrator's affected-post count. Posts whose only issue is the stale flag now show up as needing migration. Rendering is unchanged either way — this is a data cleanup, not a fix for a visible bug, so it is safe to defer.
    • Accordion blocks with nothing to clean are left byte-identical and are not rewritten, so no post gains a revision for no reason.
    • Commits
    • 2.9.2: strip retired FAQ schema flag from existing content (b2b86b5)
    • Stats
    • Commits: 1
    • Changes 5 files changed, 130 insertions(+), 14 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  19. Stable

    2.9.1

    The Accordion block itself is unchanged — same markup, same styles, still searchable by "FAQ" in the inserter.

    Read full notes 20 changes
    • What's Changed
    • Removed
    • FAQ schema dropped from the Accordion block. Google no longer supports FAQ rich results, so acf/accordion no longer emits FAQPage JSON-LD and the "Enable FAQ Schema" field is gone from the block settings.
    • Existing posts need no migration: blocks that still carry acf_accord_enable_faq_schema set to 1 render normally, and the stored value is ignored — no schema is printed.
    • The block migrator no longer writes acf_accord_enable_faq_schema into blocks it converts.
    • Commits
    • 2.9.1: drop FAQ schema from accordion block (20c57e7)
    • Fix PHP 7.4 CI dependency resolution (2483e1d)
    • Stats
    • Commits: 2
    • Changes 13 files changed, 76 insertions(+), 91 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  20. Stable

    2.9.0

    What's Changed

    Read full notes 32 changes
    • What's Changed
    • Performance
    • Replaced request-time block and field-group discovery with a generated OPcache-friendly manifest.
    • Consolidated editor styles into one cacheable bundle, with site-specific bundles that exclude blocks disabled through Block Manager.
    • Removed the TOC block's full-post do_blocks() re-render and moved its runtime CSS/JavaScript to conditional assets.
    • Moved external-image downloads and thumbnail generation out of post saves into a bounded WP-Cron queue.
    • Changed migration and recovery scans from unbounded all-post queries to resumable keyset batches, including an optional background migration worker.
    • Added request-level image attachment lookup caching, post cache priming, bounded URL-preview responses, and contextual module loading.
    • Moved callout, feature-grid, post-display, checklist, changelog, and pros/cons variation styling into cacheable stylesheets or CSS custom properties.
    • Added
    • Block Manager for disabling unused block registrations and field groups.
    • Asynchronous block usage inventory, job status, and performance diagnostics.
    • Optional Server-Timing metrics in debug environments.
    • Generated-artifact checks, PHP 7.4-8.5 compatibility CI, JSON validation, and PHPUnit coverage.
    • Fixed
    • Replaced PHP 8-only str_ends_with() calls while retaining the advertised PHP 7.4 minimum.
    • Reworked public star ratings to use atomic database tables and a REST endpoint, preventing lost concurrent votes and transient-option growth.
    • Made URL Preview editor code cacheable and limited remote HTML responses to 1 MB.
    • Commits
    • Release 2.9.0 performance overhaul (5503112)
    • Stats
    • Commits: 1
    • Changes 48 files changed, 12640 insertions(+), 1356 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  21. Stable

    2.8.1

    Batched migration: the Migrator now processes 30 posts per run with a Continue — Migrate Next 30 button and a progress bar, instead of one large request — friendlier on big sites and PHP time limits.

    Read full notes 20 changes
    • What's Changed
    • Added Migrator improvements
    • Batched migration: the Migrator now processes 30 posts per run with a Continue — Migrate Next 30 button and a progress bar, instead of one large request — friendlier on big sites and PHP time limits.
    • Affected-post visibility: Scan now lists every affected post (title, status, edit/view links) with colour-coded badges showing exactly what will change; each migration batch shows the same per-post detail for what it just changed.
    • New repair — legacy accordion field schema: acf/accordion blocks whose data used the old acf_accord_heading / acf_accord_content sub-fields (which render blank on the current template) are remapped in place to acf_accord_group_title / acf_accord_group_content, preserving FAQ schema and classes. This is the cause behind blank FAQ sections on older posts.
    • Restore points across batches: revert now covers the whole multi-batch session, and a new Discard restore points action clears backups without changing migrated content. WP-CLI: wp acf-blocks migrate [--limit=&lt;n&gt;] [--dry-run] [--revert] [--discard].
    • Commits
    • 2.8.1: batched migrator, affected-post visibility, accordion field-schema fix (4a845ab)
    • Stats
    • Commits: 1
    • Changes 3 files changed, 460 insertions(+), 138 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  22. Stable

    2.8.0

    Block recovery (all InnerBlocks blocks): Resolved the "This block contains unexpected or invalid content" / Attempt Recovery error that emptied ACF InnerBlocks blocks (Callout, CTA, Hero, Section, Feature Grid, Testimonial, Team Member…

    Read full notes 38 changes
    • What's Changed
    • Fixed
    • Block recovery (all InnerBlocks blocks): Resolved the "This block contains unexpected or invalid content" / Attempt Recovery error that emptied ACF InnerBlocks blocks (Callout, CTA, Hero, Section, Feature Grid, Testimonial, Team Member, Opinion Box, …). The cause was inner content saved as undelimited raw HTML (e.g. a bare &lt;p&gt; instead of &lt;!-- wp:paragraph --&gt;), which the editor treats as invalid InnerBlocks markup. Clicking Attempt Recovery then rebuilt the block from its template default, wiping the author's content.
    • Added
    • includes/block-recovery.php — a self-healing helper that re-wraps orphaned inner HTML into proper core blocks (paragraph, heading, list, quote; anything unrecognised is preserved verbatim in a core/html block, so no content is ever lost). It is idempotent and runs in two ways:
    • Live self-heal: filters the block editor's REST content.raw (edit context only) so existing posts open cleanly with no action required; saving then persists the repaired markup.
    • Permanent bulk repair: wp acf-blocks repair-content [--dry-run] [--post=&lt;id&gt;] rewrites affected posts in the database.
    • The InnerBlocks block set is derived automatically — unioning each block.json (supports.jsx) with the live block registry (ACF can enable InnerBlocks at runtime without declaring it in block.json) — with a acf_blocks_recovery_innerblock_names filter to customise it.
    • Added Block Migrator
    • includes/block-migrator.php + visual Migrator on the options page (Settings → ACF Blocks License). A new Block Migrator & Repair card with Scan, Dry Run, and Migrate All actions. Every change is saved through wp_update_post() (a revision is stored), so migrations are reversible. WP-CLI parity: wp acf-blocks migrate [--dry-run].
    • Reversible migrations — before each post is migrated, its original content is snapshotted both as a native WordPress revision (visible in the editor's Revisions browser) and as a per-post restore point. A Revert Last Migration button (and wp acf-blocks migrate --revert) rolls the entire batch back to its pre-migration content, byte-for-byte, independent of the site's revision settings.
    • Legacy / renamed block migrations — blocks saved under names the plugin no longer registers are remapped to the current block with field-data translation, not just renamed:
    • acf/table-of-contents, acf/table-of-content → acf/toc
    • acf/productbox → acf/product-box (incl. the legacy features repeater)
    • acf/accordion-item → acf/accordion (consecutive items merged into one block)
    • acf/accordion-group → acf/accordion (wrapper + children merged, FAQ schema preserved)
    • acf/acf-accordion → acf/accordion (acc_question/acc_answer sub-fields remapped)
    • acf/poll has no current equivalent — reported and left untouched for manual handling.
    • Unparseable-markup repair — fixes content the block parser chokes on:
    • Orphaned closing delimiters (e.g. a stray &lt;!-- /wp:post-content --&gt; with no opener) that silently push every following block into freeform text. Removed with a delimiter stack so only genuinely unmatched closers are stripped.
    • Dangling openers (a truncated &lt;!-- wp:… fragment with no --&gt;).
    • Literal --&gt; inside ACF block JSON, HTML-encoded to --&amp;gt; (identical when rendered).
    • Compatibility
    • WordPress 7.0: Added Tested up to: 7.0 header. Audited for WordPress 7 / ACF Pro 6.x — all 29 blocks already use Block API v3, register via block.json (no deprecated acf_register_block_type), retain the ACF 6.7+ acf_setup_meta compatibility layer, and contain no PHP 8.2–8.5 deprecation patterns (verified against PHP 8.5).
    • Commits
    • Release 2.8.0: block recovery + migrator with reversible migrations (fc6bc7d)
    • Stats
    • Commits: 1
    • Changes 5 files changed, 1684 insertions(+), 2 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  23. Stable

    2.7.1

    Fix post-display CSS regression: static flag with ID-scoped selectors (33406be)

    Read full notes 18 changes
    • What's Changed
    • Commits
    • Fix post-display CSS regression: static flag with ID-scoped selectors (33406be)
    • Bump version to 2.7.1 (177d966)
    • Fix code quality, dark mode, performance, and extensibility across plugin (af92331)
    • Fix accessibility, dark mode, performance, and security issues (c8aca43)
    • Stats
    • Commits: 4
    • Changes 30 files changed, 241 insertions(+), 103 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  24. Stable

    2.7.0

    Bump version to 2.7.0 (63e5c10)

    Read full notes 17 changes
    • What's Changed
    • Commits
    • Bump version to 2.7.0 (63e5c10)
    • Improve product box design: fix font-size bug, checkmark bullets, two-column features, horizontal bottom layout, clickable image (ca67938)
    • Fix product box layout when features list is taller than image (f92566d)
    • Stats
    • Commits: 3
    • Changes 3 files changed, 14 insertions(+), 7 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  25. Stable

    2.6.0

    All blocks: Every ACF field is now optional. Removed required: 1 flags and min: 1 constraints on repeaters/relationships so any block can be inserted without being forced to fill specific fields.

    Read full notes 24 changes
    • What's Changed
    • Changed
    • All blocks: Every ACF field is now optional. Removed required: 1 flags and min: 1 constraints on repeaters/relationships so any block can be inserted without being forced to fill specific fields.
    • Removed
    • Chat block: Completely removed the acf/chat-block and its directory (blocks/chat-block/).
    • Improved
    • LLM prompt library (llm/): Added llm/README.md as an index covering all 29 blocks grouped by category, universal rules (single-line JSON, field-key prefix, repeater format, InnerBlocks vs ACF data), and a block-comment anatomy reference. Removed stale "Required" annotations from nine per-block docs now that no fields are required.
    • Commits
    • Bump version to 2.6.0 (1fe9e20)
    • Improve LLM prompt library (af0a5b7)
    • Remove Chat block (11465d2)
    • Make all block fields optional (32dda06)
    • Stats
    • Commits: 4
    • Changes 26 files changed, 153 insertions(+), 297 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  26. Stable

    2.5.9

    Product Review block: Fixed 4 Google Search Console structured data errors: missing price, hasMerchantReturnPolicy, shippingDetails in offers, and missing image fallback.

    Read full notes 24 changes
    • What's Changed
    • Fixed
    • Product Review block: Fixed 4 Google Search Console structured data errors: missing price, hasMerchantReturnPolicy, shippingDetails in offers, and missing image fallback.
    • Added
    • Product Review block: New Product Type field — choose between Product (physical/generic) and SoftwareApplication (apps/SaaS) schema types. SoftwareApplication includes applicationCategory and operatingSystem fields.
    • Product Review block: New Return Policy field with options: No Returns (digital), Finite Return Window (with configurable days), Unlimited Returns. Maps to hasMerchantReturnPolicy in offers schema.
    • Product Review block: New Delivery Type field — Digital (instant/$0 shipping) or Physical. Digital products get zero-cost instant delivery in shippingDetails.
    • Product Review block: New Shipping Country field (ISO country code) used for both shipping destination and return policy region.
    • Product Review block: Image now falls back to post featured image when no product image is set, preventing GSC "Missing field image" errors.
    • Product Review block: Offers schema is now always generated (price defaults to "0" when empty) to prevent GSC missing field warnings.
    • Commits
    • Fix GSC structured data errors and add schema options to Product Review block (37e9980)
    • Stats
    • Commits: 1
    • Changes 4 files changed, 236 insertions(+), 23 deletions(-)
    • Plugin Info
    • Blocks included: 30
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  27. Stable

    2.5.8

    Improve chat block accessibility and fix preview handling (b325332)

    Read full notes 16 changes
    • What's Changed
    • Commits
    • Improve chat block accessibility and fix preview handling (b325332)
    • Fix chat block not loading in editor by using nested array example format (7532f12)
    • Stats
    • Commits: 2
    • Changes 4 files changed, 24 insertions(+), 24 deletions(-)
    • Plugin Info
    • Blocks included: 30
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  28. Stable

    2.5.7

    Bump version to 2.5.7 (df44467)

    Read full notes 19 changes
    • What's Changed
    • Commits
    • Bump version to 2.5.7 (df44467)
    • Make acf-innerblocks-container transparent to layout in editor (4a66f2f)
    • Remove extra acf-innerblocks-container div from section block frontend (715ea20)
    • Fix bugs, security issues, and dead code found in codebase audit (43fc8e5)
    • Add Chat block for displaying styled conversations between people (dcf9294)
    • Stats
    • Commits: 5
    • Changes 15 files changed, 297 insertions(+), 53 deletions(-)
    • Plugin Info
    • Blocks included: 30
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  29. Stable

    2.5.6

    Bump version to 2.5.6 (b0f8846)

    Read full notes 16 changes
    • What's Changed
    • Commits
    • Bump version to 2.5.6 (b0f8846)
    • Remove .flavor-dark from all dark mode selectors across all blocks (2de7c95)
    • Stats
    • Commits: 2
    • Changes 22 files changed, 30 insertions(+), 30 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  30. Stable

    2.5.5

    Improve stats block design, fix pros-cons dark mode, remove prefers-color-scheme across all blocks (52d4d6f)

    Read full notes 17 changes
    • What's Changed
    • Commits
    • Improve stats block design, fix pros-cons dark mode, remove prefers-color-scheme across all blocks (52d4d6f)
    • Bump version to 2.5.5 (22530f5)
    • Fix callout block dark mode: add explicit text colors and dark mode support (ad9aa68)
    • Stats
    • Commits: 3
    • Changes 22 files changed, 102 insertions(+), 24 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  31. Stable

    2.5.4

    Bump version to 2.5.4 (c3bfe3b)

    Read full notes 16 changes
    • What's Changed
    • Commits
    • Bump version to 2.5.4 (c3bfe3b)
    • Fix font sizing when html font-size is set to 62.5% (1rem = 10px) (6dde474)
    • Stats
    • Commits: 2
    • Changes 35 files changed, 59 insertions(+), 59 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  32. Stable

    2.5.3

    Use readable filenames in image localizer, preserve old MD5 lookups (8193b46)

    Read full notes 17 changes
    • What's Changed
    • Commits
    • Use readable filenames in image localizer, preserve old MD5 lookups (8193b46)
    • Generate readable filenames for imported URL preview images (90e03b4)
    • Replace hardcoded max-width with WP content-size preset, bump to 2.5.3 (c4d3bd0)
    • Stats
    • Commits: 3
    • Changes 4 files changed, 130 insertions(+), 13 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  33. Stable

    2.5.2

    Make URL Preview Card style variations visually distinct (73302a4)

    Read full notes 20 changes
    • What's Changed
    • Commits
    • Make URL Preview Card style variations visually distinct (73302a4)
    • Fix alignwide/alignfull not working on URL Preview Card (aeb595f)
    • Bump version to 2.5.2 (3ac7372)
    • Add rate limiting to webhook proxy, fix bounds checks, safer HTML parsing (dd51b95)
    • Additional escaping, validation, and performance improvements (c84a328)
    • Improve performance, security, and fix missing webhook proxy endpoint (c50c7ee)
    • Stats
    • Commits: 6
    • Changes 15 files changed, 283 insertions(+), 194 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  34. Stable

    2.5.1

    Bump version to 2.5.1 (cc3aa36)

    Read full notes 16 changes
    • What's Changed
    • Commits
    • Bump version to 2.5.1 (cc3aa36)
    • Register localized images as WP attachments for srcset support (1d8f62b)
    • Stats
    • Commits: 2
    • Changes 3 files changed, 127 insertions(+), 2 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  35. Stable

    2.5.0

    Add srcset/sizes attributes to all block images for responsive serving (878b9bf)

    Read full notes 15 changes
    • What's Changed
    • Commits
    • Add srcset/sizes attributes to all block images for responsive serving (878b9bf)
    • Stats
    • Commits: 1
    • Changes 15 files changed, 105 insertions(+), 27 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  36. Stable

    2.4.1

    Reduce pros-cons column left padding and bump version to 2.4.1 (395beec)

    Read full notes 16 changes
    • What's Changed
    • Commits
    • Reduce pros-cons column left padding and bump version to 2.4.1 (395beec)
    • Replace blank SVG icons with Unicode check and cross in pros-cons block (1ddc07e)
    • Stats
    • Commits: 2
    • Changes 3 files changed, 6 insertions(+), 6 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  37. Stable

    2.4.0

    Modernize block designs and rewrite email form for security (9d2f51e)

    Read full notes 15 changes
    • What's Changed
    • Commits
    • Modernize block designs and rewrite email form for security (9d2f51e)
    • Stats
    • Commits: 1
    • Changes 9 files changed, 213 insertions(+), 154 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  38. Stable

    2.3.2

    Bump version to 2.3.2 (c876e1c)

    Read full notes 19 changes
    • What's Changed
    • Commits
    • Bump version to 2.3.2 (c876e1c)
    • Center URL preview cards with max-width and auto margins (525e93b)
    • Force TOC links to use text color instead of theme link color (95ba2d9)
    • Remove TOC background/border and reduce padding for cleaner look (ecfebda)
    • Move sticky TOC from left to right side of viewport (f7de3fa)
    • Stats
    • Commits: 5
    • Changes 4 files changed, 4 insertions(+), 4 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  39. Stable

    2.3.1

    Reduce TOC padding, add CSS counters for ordered lists, bump to 2.3.1 (f2e978e)

    Read full notes 17 changes
    • What's Changed
    • Commits
    • Reduce TOC padding, add CSS counters for ordered lists, bump to 2.3.1 (f2e978e)
    • Use currentColor with color-mix() so TOC inherits theme styles (245fb5b)
    • Improve TOC block design with better visual hierarchy and interactions (f243750)
    • Stats
    • Commits: 3
    • Changes 4 files changed, 16 insertions(+), 11 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  40. Stable

    2.3.0

    Guard libxml_disable_entity_loader() for PHP 8.0+ compat (5ea8d3b)

    Read full notes 18 changes
    • What's Changed
    • Commits
    • Guard libxml_disable_entity_loader() for PHP 8.0+ compat (5ea8d3b)
    • Fix security vulnerabilities, accessibility gaps, and hardening across all blocks (dadb9c6)
    • Fallback to no-image layout when product-box has no image (e2c2936)
    • Remove hardcoded font-family, use theme.json primary color for product review button, fix a11y (d1d355b)
    • Stats
    • Commits: 4
    • Changes 24 files changed, 57 insertions(+), 56 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  41. Stable

    2.2.9

    Callout block: Block appeared blank when inserted — no InnerBlocks template was provided. Added default heading + paragraph template matching the CTA/Hero pattern. Also added uniqid() fallback for block ID.

    Read full notes 20 changes
    • What's Changed
    • Fixed
    • Callout block: Block appeared blank when inserted — no InnerBlocks template was provided. Added default heading + paragraph template matching the CTA/Hero pattern. Also added uniqid() fallback for block ID.
    • Compare block: Backward-compat code fetched old comp_list_class sub-field but template always read comp_list_content, silently dropping feature lists from older blocks. Old field values are now mapped to comp_list_content.
    • Compare block: Added empty-state preview message when no columns are configured (consistent with accordion/tabs blocks).
    • Compare block: Cleaned up inline PHP for title styles and CTA button attributes for better readability.
    • Commits
    • Fix callout blank rendering and compare block bugs, bump to 2.2.9 (5d9e5db)
    • Stats
    • Commits: 1
    • Changes 4 files changed, 44 insertions(+), 17 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  42. Stable

    2.2.8

    Product Box — Top Image variation: New is-style-top-image block style shows image above content cropped to 16:9 aspect ratio. New product-box-wide (800x450) image size registered for this variation.

    Read full notes 26 changes
    • What's Changed
    • Added
    • Product Box — Top Image variation: New is-style-top-image block style shows image above content cropped to 16:9 aspect ratio. New product-box-wide (800x450) image size registered for this variation.
    • Fixed
    • Critical: Section block custom CSS never rendered on frontend — md_store_block_css() stored CSS in a static variable but md_output_stored_block_css() read from a global, so the footer &lt;style&gt; tag was always empty. Fixed by using a shared global variable.
    • Critical: Post Display block crashed (fatal error) when ACF compat layer returned raw post IDs instead of WP_Post objects. Now normalizes entries via get_post() before rendering.
    • Changelog block: Nested repeater items (type/description) failed to parse in flat data format with ACF 6.7+. Now falls back to acf_blocks_get_nested_repeater() when items aren't already arrays.
    • Email Form block: Wrong text domain 'gauravtiwari' replaced with 'acf-blocks' for translatable strings.
    • Product Review block: Removed dead $halfSvg variable with broken uniqid() gradient IDs.
    • Improved
    • Product Box design refresh: Refined color palette (slate scale), softer shadows, larger border-radius, badge shadow, smoother hover transitions, and better dark mode Amazon button contrast.
    • Commits
    • Fix 5 bugs across plugin and bump version to 2.2.8 (f1d262e)
    • Add Top Image variation to Product Box block with design improvements (ecc4e06)
    • Stats
    • Commits: 2
    • Changes 12 files changed, 241 insertions(+), 30 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  43. Stable

    2.2.7

    What's Changed

    Read full notes 18 changes
    • What's Changed
    • Fixed priceCurrency fix.
    • Commits
    • fix resolve priceCurrency issue and update plugin version to 2.2.7 (63e5628)
    • priceCurrency fix. Version Bump (6503ffa)
    • priceCurrency fix (9b55abd)
    • Stats
    • Commits: 3
    • Changes 4 files changed, 9 insertions(+), 1572 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  44. Stable

    2.2.6

    Commits: 0

    Read full notes 14 changes
    • What's Changed
    • Commits
    • Stats
    • Commits: 0
    • Changes:
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  45. Stable

    2.2.5

    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 notes 25 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 &lt;video&gt; 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)
    • Stats
    • Commits: 2
    • Changes 6 files changed, 130 insertions(+), 17 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  46. Stable

    2.2.4

    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 notes 18 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)
    • Stats
    • Commits: 1
    • Changes 3 files changed, 91 insertions(+), 7 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  47. Stable

    2.2.3

    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 notes 26 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)
    • Stats
    • Commits: 1
    • Changes 24 files changed, 502 insertions(+), 213 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  48. Stable

    1.4.0

    Release version 1.4.0

  49. Stable

    2.2.2

    v2.2.2: TOC borders, compare block WYSIWYG, self-contained stats counter, LLM docs audit (85c7d21)

    Read full notes 18 changes
    • What's Changed
    • Commits
    • v2.2.2: TOC borders, compare block WYSIWYG, self-contained stats counter, LLM docs audit (85c7d21)
    • feat: self-contained stats counter, remove MD.statsCounter() theme dependency (274b979)
    • docs add missing hidden field attributes to email-form LLM doc (485ffc8)
    • docs update LLM prompts for product-box, pros-cons, toc, and compare blocks (f0acd4c)
    • Stats
    • Commits: 4
    • Changes 9 files changed, 232 insertions(+), 56 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  50. Stable

    2.2.1

    v2.2.1: Product box 2-row layout, smart image sizing, TOC borders, compare block overhaul (9199290)

    Read full notes 15 changes
    • What's Changed
    • Commits
    • v2.2.1: Product box 2-row layout, smart image sizing, TOC borders, compare block overhaul (9199290)
    • Stats
    • Commits: 1
    • Changes 9 files changed, 293 insertions(+), 152 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  51. Stable

    2.2.0

    v2.2.0: Minimalist visual overhaul for product box, pros/cons, and TOC blocks (b3d38e4)

    Read full notes 16 changes
    • What's Changed
    • Commits
    • v2.2.0: Minimalist visual overhaul for product box, pros/cons, and TOC blocks (b3d38e4)
    • docs add critical single-line JSON rule to all 29 LLM block docs (14d8419)
    • Stats
    • Commits: 2
    • Changes 37 files changed, 71 insertions(+), 32 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  52. Stable

    2.1.8

    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 notes 19 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)
    • Stats
    • Commits: 2
    • Changes 4 files changed, 232 insertions(+), 162 deletions(-)
    • Plugin Info
    • Blocks included: 29
    • Requires WordPress: 6.0+
    • Requires PHP: 7.4+
    • Requires: ACF Pro 6.0+ or Secure Custom Fields
    • Installation
    • Download acf-blocks-plugin-*.zip from the assets below
    • Go to Plugins → Add New → Upload Plugin in WordPress admin
    • Upload the zip file and activate
  53. Stable

    2.1.7

    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 notes 2 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).
  54. Stable

    2.1.6

    Fixed

    Read full notes 2 changes
    • Fixed
    • Switch license API to POST requests for better compatibility.
  55. Stable

    2.1.5

    Fixed

    Read full notes 2 changes
    • Fixed
    • Improve compatibility for nested repeaters in block editor.
  56. Stable

    2.1.4

    Enhance compatibility layer for nested repeaters with acf_blocks_reconstruct_nested_repeaters() filter.

    Read full notes 2 changes
    • Fixed
    • Enhance compatibility layer for nested repeaters with acf_blocks_reconstruct_nested_repeaters() filter.
  57. Stable

    2.1.3

    Fix nested repeater compat and add nested key resolver (acf_blocks_resolve_nested_key()).

    Read full notes 3 changes
    • Fixed
    • Fix nested repeater compat and add nested key resolver (acf_blocks_resolve_nested_key()).
    • Fix intval() on array bypassing nested row fallback.
  58. Stable

    2.1.2

    Fixed

    Read full notes 2 changes
    • Fixed
    • Fix repeater compat layer for nested row format.
  59. Stable

    2.1.1

    Changed

    Read full notes 2 changes
    • Changed
    • Remove build script for packaging (handled by GitHub Actions).
  60. Stable

    2.1.0

    Added

    Read full notes 3 changes
    • Added
    • Fluent Cart licensing integration (product ID 1150934).
    • Auto-install SCF (Secure Custom Fields) on activation if ACF Pro is not present.
  61. Stable

    2.0.6

    Fixed

    Read full notes 2 changes
    • Fixed
    • Refine theme overrides to respect host styles in dark mode.
  62. Stable

    2.0.4

    Release version 2.0.4

  63. Stable

    2.0.3

    Release version 2.0.3

  64. Stable

    2.0.2

    Release version 2.0.2

  65. Stable

    2.0.1

    Release version 2.0.1

  66. Stable

    2.0.0

    Release version 2.0.0

  67. Stable

    1.9.1

    Release version 1.9.1

  68. Stable

    1.9.0

    Release version 1.9.0

  69. Stable

    1.8.3

    Release version 1.8.3

  70. Stable

    1.8.2

    Release version 1.8.2

  71. Stable

    1.8.1

    Release version 1.8.1

  72. Stable

    1.8.0

    Release version 1.8.0

  73. Stable

    1.7.4

    Release version 1.7.4

  74. Stable

    1.7.3

    Release version 1.7.3

  75. Stable

    1.7.2

    Release version 1.7.2

  76. Stable

    1.7.1

    Release version 1.7.1

  77. Stable

    1.7.0

    Release version 1.7.0

  78. Stable

    1.6.1

    Release version 1.6.1

  79. Stable

    1.6.0

    Release version 1.6.0

  80. Stable

    1.5.1

    Release version 1.5.1

  81. Stable

    1.5.0

    Release version 1.5.0

  82. Stable

    1.4.7

    Release version 1.4.7

  83. Stable

    1.4.6

    Release version 1.4.6

  84. Stable

    1.4.5

    Release version 1.4.5

  85. Stable

    1.4.4

    Release version 1.4.4

  86. Stable

    1.4.3

    Release version 1.4.3

  87. Stable

    1.4.2

    Release version 1.4.2

  88. Stable

    1.4.1

    Release version 1.4.1

  89. Stable

    1.3.9

    Release version 1.3.9

  90. Stable

    1.3.8

    Release version 1.3.8

  91. Stable

    1.3.7

    Release version 1.3.7

  92. Stable

    1.3.5

    Release version 1.3.5

  93. Stable

    1.3.4

    Release version 1.3.4

  94. Stable

    1.3.3

    Release version 1.3.3

  95. Stable

    1.3.0

    Release version 1.3.0

  96. Stable

    1.2.5

    Release version 1.2.5

  97. Stable

    1.2.4

    Release version 1.2.4

  98. Stable

    1.2.3

    Release version 1.2.3

  99. Stable

    1.2.2

    Release version 1.2.2

  100. Stable

    1.2.1

    What's Changed

    Read full notes 2 changes
    • What's Changed
    • Improve block styling, add ACF Blocks category, update version to 1.2.1
  101. Stable

    1.2.0

    Release version 1.2.0

  102. Stable

    1.1.4

    Release version 1.1.4

  103. Stable

    1.1.1

    What's Changed

    Read full notes 11 changes
    • What's Changed
    • Convert codebase to ACF Pro plugin
    • Add style/editorStyle to block.json for editor preview
    • Optimize Post Display block and add CSS minification
    • Fix FAQ block rendering and add migration guide
    • Claude/acf pro plugin conversion v bk0 c
    • Add customizable Table of Contents block
    • Fix TOC block save failure and improve preview
    • Add GitHub Actions workflow for releases
    • Simplify TOC styling to inherit from theme
    • Fix sticky TOC positioning to left edge