GT Extensions for FluentCart 2.0.0 replaces the old per-variation currency label with a complete multi-currency checkout system.
Changes7
Read full notesHide notes
GT Extensions for FluentCart 2.0.0 replaces the old per-variation currency label with a complete multi-currency checkout system.
Highlights:
One authoritative currency per cart, order, transaction, and subscription.
Exact per-variation price books with manual or Frankfurter exchange-rate fallback.
Currency-to-payment-gateway routing with preferred gateways and server-side validation.
Server-side cart repricing for items, fixed coupons, shipping, fees, and signup amounts.
Storefront currency selector and [gtfc_currency_selector] shortcode.
FluentCart product-editor controls for exact local prices.
Redesigned responsive settings, diagnostics, rate markup, rounding, and missing-price behavior.
Multi-currency checkout requires FluentCart 1.5.5 or newer. Version 2.0.0 is designed for two-decimal currencies; test zero-decimal currencies separately before production use.
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…
Fixed1
Read full notesHide notes
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.
Added12
Changed10
Fixed7
Security4
Read full notesHide notes
Core Forms 4.4.0 includes the complete feature set originally planned for roadmap versions 4.4 and 4.5.
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 notesHide notes
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…
Fixed1
Added4
Read full notesHide notes
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)
Library blocks can be assigned to theme regions — header, hero, before/after content, sidebar, footer, 404 — and rendered by any theme via gt_pb_region( 'header' ) / gt_pb_has_region(). A blank hybrid theme can be little more than region…
Read full notesHide notes
What's Changed
Theme building
Library blocks can be assigned to theme regions — header, hero, before/after content, sidebar, footer, 404 — and rendered by any theme via gt_pb_region( 'header' ) / gt_pb_has_region(). A blank hybrid theme can be little more than region calls.
Hook positions now actually render: wp_head, wp_body_open, wp_footer, loop_start/loop_end, get_header/footer/sidebar, and before/after the content — priority-ordered.
Block rename + migration
The block is now gt-page-block/page-block (category: Page Blocks). The legacy marketers-delight/page-block stays registered (hidden from the inserter) so existing content keeps rendering, with a one-click transform to the new block.
Migration tool: Settings → Tools → Migrate blocks (with dry run), or WP-CLI wp gt-pb migrate-blocks [--dry-run] — rewrites stored content without touching post modified dates.
REST API (pbb/v1)
GET/POST /blocks, GET/PUT/DELETE /blocks/<id> (trash or ?force=true), POST /blocks/<id>/duplicate, GET /blocks/<id>/render — search, status filtering, pagination, and status-count headers. Read = edit_posts, write = manage_options.
Library admin panel
New card-grid library with lazy live-preview thumbnails, search, status filter tabs, duplicate / trash / restore / delete-forever, copy-shortcode, and position chips. Classic list table remains at ?view=list.
Block editor
Preview-first Page Block: rendered live preview (auto-sizing iframe with theme styles) by default; Preview/Code toggles in the block toolbar.
New - Field names accept uppercase. The builder's Name field no longer force-lowercases input (HTML `name`/`id` are case-sensitive). Illegal characters are still sanitized. - Textarea options: Rows (height), Resize behaviour (default /…
Read full notesHide notes
Core Forms 4.3.8
New - Field names accept uppercase. The builder's Name field no longer force-lowercases input (HTML `name`/`id` are case-sensitive). Illegal characters are still sanitized. - Textarea options:Rows (height), Resize behaviour (default / vertical / horizontal / both / none), and a live character counter that shows "used / limit" when a Max length is set. An explicit Rows value now wins over the 5-line default height. - Phone (tel) value limits: new Min length, Max length, and Pattern controls to constrain accepted values.
Fixed - The builder's HTML generator silently dropped textarea min/max-length and conditional-logic attributes on save, so those validations were lost. The textarea output now matches the server-side renderer.