Added Explain This Page diagnostics backed by the production cache policy, deterministic cache keys, local artifact metadata, and compiled edge expectations.
Read full notes8 changes
Added Explain This Page diagnostics backed by the production cache policy, deterministic cache keys, local artifact metadata, and compiled edge expectations.
Added Verified Purge with bounded redacted receipts covering origin removal, post-purge response fingerprints, response privacy signals, and Cloudflare cache headers.
Added a Cloudflare Free rule compiler with exact expression preview, managed-rule drift detection, competing-rule overlap warnings, expected create/update/noop operation, and ten-rule capacity reporting.
Added Commerce Safety Lab in-memory policy simulation and safe read-only checks for FluentCart, Easy Digital Downloads, and WooCommerce dynamic routes.
Added administrator-only Unused CSS Training Mode with bounded selector observation, one-hour sessions, candidate review, publication, rollback, and deterministic 0/10/25/50/100 percent rollout cohorts.
Added opt-in signed Private Islands for explicitly registered cart-count, account-link, and developer fragments with private no-store responses and fail-closed public fallbacks.
Added a 25-site Fleet Console foundation using five-minute, one-use, license-signed configuration bundles with recursive credential removal and no remote-code capability.
Added standalone Safety Lab and Fleet screens, Cloudflare plan UI, administrator-bar shortcuts, WP-CLI commands, and focused unit coverage for the new policy and signing layers.
Added stable, port-safe license identities for Studio and other local WordPress sites so FluentCart protected-package signatures are not corrupted by localhost:PORT values.
Read full notes2 changes
Added stable, port-safe license identities for Studio and other local WordPress sites so FluentCart protected-package signatures are not corrupted by localhost:PORT values.
Kept ordinary production site URLs unchanged and added a gt_performance_license_site_url filter for deliberate identity overrides.
Moved the live manual database scan and selectable cleanup interface from Optimization to Tools while keeping scheduled database maintenance in Optimization.
Read full notes5 changes
Moved the live manual database scan and selectable cleanup interface from Optimization to Tools while keeping scheduled database maintenance in Optimization.
Returned completed manual cleanup actions to the Tools tab and removed the redundant one-click cleanup card.
Added compatible WP_REDIS_* configuration for Till Krüss Redis Object Cache, including ACL credential arrays, TCP/TLS and Unix sockets, database, prefix, timeouts, legacy key salt, and the emergency disable constant.
Kept GTP_REDIS_* constants as highest-precedence overrides and added isolated configuration coverage for compatibility and precedence.
Published the $199 FluentCart product page with verified direct-checkout links, one-site lifetime-license details, and responsive purchase sections.
Added encrypted FluentCart license activation, weekly verification, deactivation, version checks, protected package delivery, and native WordPress update metadata.
Read full notes5 changes
Added encrypted FluentCart license activation, weekly verification, deactivation, version checks, protected package delivery, and native WordPress update metadata.
Added a dedicated License tab with masked credentials, plan and expiration details, on-demand update checks, wp-config.php license support, and administrator-friendly errors.
Added response normalization and tests for FluentCart's live top-level updater response, malformed versions, unsafe package URLs, and the no-update path.
Fixed activation-time registration of the plugin's custom queue and weekly cron schedules.
Added the GT Performance FluentCart product identity plus reproducible WordPress directory, storefront, and social assets that embed real WordPress Studio screenshots.
Fixed the Gutenberg Core Form block preview taking about 60 seconds to load on busy editor screens by replacing the generic WordPress server-render request with a focused Core Forms preview endpoint, a summary-only form selector, and shared…
Read full notes2 changes
Fixed
Fixed the Gutenberg Core Form block preview taking about 60 seconds to load on busy editor screens by replacing the generic WordPress server-render request with a focused Core Forms preview endpoint, a summary-only form selector, and shared request caching.
Core Forms 4.4.0 includes the complete feature set originally planned for roadmap versions 4.4 and 4.5.
Read full notes37 changes
Added
Added inline Stripe Payment Element checkout with server-owned product pricing, idempotent PaymentIntent creation, and signed webhook confirmation.
Added first-class Razorpay hosted checkout with payment-link, captured-payment, failure, cancellation, and refund handling.
Added one-click importers for Ninja Forms and Formidable Forms alongside the existing CF7, Gravity Forms, WPForms, and Fluent Forms migration tools.
Added WP-CLI commands for form import/export/listing, submission maintenance, product and plan administration, license reporting, order reporting, and expiry maintenance.
Added native actions for WooCommerce, Easy Digital Downloads, SureCart, WP Simple Pay, MemberPress, LearnDash, Paid Memberships Pro, Groundhogg, Jetpack CRM, WP-CRM System, and SureContact.
Added AutomatorWP, Uncanny Automator, and OttoKit triggers and actions with form and submission payloads.
Added signed inbound WhatsApp webhooks for Meta Cloud API and Twilio, including reply correlation and delivery-state history in submission conversations.
Added a multi-product licensing and lightweight ecommerce system with products, plans, orders, subscriptions, customer accounts, activation limits, refunds, renewals, and audited signed downloads.
Added a dedicated customer dashboard for orders, masked/revealable keys, product downloads, activated sites, and subscription controls.
Added free, Stripe, Razorpay, and renewal license-form templates with complete payment and fulfillment actions.
Added a default Sample Product with free, USD annual, and INR annual plans on new and upgraded sites.
Added native Bricks and Elementor integrations plus a per-form WCAG 2.2 audit and conservative one-click repairs.
Changed
The form editor now renders only the active tab instead of executing every tab's PHP, JavaScript, analytics, and REST requests on every page load.
The visual builder now boots from server-rendered form and schema data, removing its two blocking initial REST requests.
Builder saves now persist markup and schema atomically through one endpoint with a bounded timeout and a standard form-post fallback.
Tab-specific saves merge with existing form settings, preserving payment and action configuration when saving Fields, Messages, or other individual tabs.
Licensing actions are always visible under a dedicated Commerce & Licensing category instead of disappearing when the public activation API is disabled.
Product and plan slugs are generated automatically, normalized, and made unique; manually entered slugs remain supported.
Plan prices are entered in customer-facing major units such as 49.00 instead of minor units such as 4900.
Product packages use the WordPress Media Library picker and uploader instead of requiring an attachment ID.
The licensing backend now includes catalog statistics, quick-start guidance, direct Add plan/Add package links, and file names instead of raw attachment IDs.
The existing core-forms.com CF Licenser client, option keys, 32-character key format, six-hour heartbeat, and update hooks remain separate from and compatible with the new merchant licensing subsystem.
Fixed
Fixed the Fields builder remaining on an indefinite loading spinner when either initial REST request stalled.
Fixed inactive Analytics requests and form-builder assets loading on unrelated form tabs.
Fixed paid plans being fulfillable from a non-payment form or before verified payment confirmation.
Fixed payment fulfillment accepting a mismatched paid amount or currency when validation is enabled.
Fixed free plans being incorrectly coupled to a payment requirement.
Fixed action-variable references showing a permanent Loading message when the Fields builder was not present.
Fixed stale admin asset caches by versioning the main admin stylesheet and licensing script from their file modification times while keeping the plugin version at 4.4.0.
Security
License fulfillment is idempotent per submission and product selection, preventing duplicate orders or keys during webhook retries.
Signed package links expire, verify the stored SHA-256 digest before streaming, and record downloads in an audit table.
Verified refunds disable issued licenses and cancel related subscriptions.
Inbound messaging and payment webhooks require provider signatures before they can change submission, payment, or fulfillment state.
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 notes20 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=<n>] [--dry-run] [--revert] [--discard].
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 notes38 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 <p> instead of <!-- wp:paragraph -->), 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=<id>] 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/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 <!-- /wp:post-content --> 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 <!-- wp:… fragment with no -->).
Literal --> inside ACF block JSON, HTML-encoded to --&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)