Added: Bundled workflow guides for MailerHive, Core Support, FluentCart, GT Extensions for FluentCart, Stackless for WooCommerce and Page Blocks Builder (PBB).
Read full notes3 changes
Added Bundled workflow guides for MailerHive, Core Support, FluentCart, GT Extensions for FluentCart, Stackless for WooCommerce and Page Blocks Builder (PBB).
Added site-context reports plugin workflow integrations, installed versions, active state and associated skills. Existing plugin-provided skills continue to supply their detailed commands.
Updated MCP server instructions, the settings skills panel and companion guidance direct clients to the matching plugin workflows. All developer operations retain their existing opt-ins.
Improved: with Woo Redesign on, WooCommerce → Settings reads as sections under their own headings, without a rule under every row. Help that explains a field shows as text under it instead of behind a "?" icon, tables such as Emails and Shipping zones sit flush in the page, and Save stays on screen while you scroll.
Read full notes5 changes
Improved with Woo Redesign on, WooCommerce → Settings reads as sections under their own headings, without a rule under every row. Help that explains a field shows as text under it instead of behind a "?" icon, tables such as Emails and Shipping zones sit flush in the page, and Save stays on screen while you scroll.
Improved Store at a glance is one quiet strip. A dot marks only a number that needs attention, and the hints say how long the oldest order has waited instead of repeating the label. The Invoices and Affiliates totals use the same strip.
Improved Woo Redesign drops shadows from static cards and the blue outline from every enabled module card, shows documentation and settings links as secondary buttons, and uses the same underline tabs on every Stackless screen.
Fixed with Woo Redesign on, WooCommerce → Settings and Status no longer scroll sideways on phones. Fixed-width fields and wide tables now fit the screen or scroll inside their own box.
Fixed on stores that keep orders in posts storage (HPOS off), Custom Invoices no longer fills the debug log with WooCommerce's "Order query argument (meta_query) is not supported" notice. Invoice lists, counts and lookups return the same results as before.
New: Woo Redesign module. Restyles the WooCommerce admin in the look of the Stackless screens: a soft page canvas, card-style tables with quiet uppercase headings, soft order and stock status badges, 2px corners (4px on cards), one 40px height for fields and buttons, tinted notices, one primary action per screen, settings and status pages as cards, and Tabler icons on the product data tabs (including the Stackless tabs). Choose which areas change (orders and coupons, products and catalog, settings and status, Home and Analytics), follow your WordPress admin color scheme, use Stackless Blue or pick a color, and choose comfortable or compact tables. Admin only: nothing loads on the storefront, and other admin pages keep their look.
Read full notes33 changes
New Woo Redesign module. Restyles the WooCommerce admin in the look of the Stackless screens: a soft page canvas, card-style tables with quiet uppercase headings, soft order and stock status badges, 2px corners (4px on cards), one 40px height for fields and buttons, tinted notices, one primary action per screen, settings and status pages as cards, and Tabler icons on the product data tabs (including the Stackless tabs). Choose which areas change (orders and coupons, products and catalog, settings and status, Home and Analytics), follow your WordPress admin color scheme, use Stackless Blue or pick a color, and choose comfortable or compact tables. Admin only: nothing loads on the storefront, and other admin pages keep their look.
New Woo Redesign shows the store at a glance above the orders list (to fulfil, awaiting payment, on hold, sales today) and the products list (live, drafts, out of stock, low stock), each linking to the matching list.
New Woo Redesign makes the product editor easier to follow: a "Ready to sell?" checklist for name, price, image, category and short description, a one-line intro on every product data tab, a plain-language line for the product type and the Virtual and Downloadable boxes, and field help shown as text instead of behind "?" icons. Product and coupon fields line up in one column with their descriptions under them, and dimensions sit in one row.
New Software Licensing products get a WordPress updater listing: a plugin icon (PNG, JPG or SVG) shown beside the update in Dashboard → Updates and on the Plugins screen, a banner for "View details", a theme screenshot, an upgrade notice, author and homepage links, Description, Installation and FAQ tabs, and required plugins. Each falls back to the product image, description and store details. The Licensing tab is split into titled sections.
Improved Stackless screens use 2px corners (4px on cards), black module links with separators between groups, 40px fields and tinted notices instead of a colored stripe.
Fixed the Outbound clicks column on the products list collapsed to zero width, so its heading broke into one letter per line.
Fixed a new release of a licensed product now reaches customers who already bought it. WooCommerce only grants the files a product has when the order is paid, so a version uploaded later (in the editor, through the REST API or a deploy script) never appeared in earlier buyers' My Account → Downloads. New files are now granted in the background to every order whose license may download them, and a customer's own orders are topped up again when they open Downloads, Licenses or an order, which also catches licenses renewed after a lapse. Expired and revoked licenses get nothing new. Turn this off under Software Licensing → Downloads → New releases.
Fixed switching a subscription to another licensed product no longer creates a second license key that never expires. The switch moves the existing key to the new plan, as intended, and the switch order holds no keys of its own.
Fixed a plan switch that moves one item of a multi-item subscription to a new billing schedule now moves that item's license keys to the new subscription, so they renew, pause and end with it.
Fixed in "one key, limit multiplied by quantity" mode, a plan switch keeps the quantity: three seats of a 1-site plan switched to a 5-site plan give 15 sites, not 5.
Fixed switching to a plan without licensing ends the old plan's keys instead of leaving them active and renewing; switching from such a plan to a licensed one creates the key.
Fixed an order cancelled or refunded by status and then set back to processing or completed gets its license keys back. Keys revoked by a partial refund or by hand stay revoked.
Fixed removing a variation no longer breaks the keys sold for it. They keep validating, updating and renewing under the product's own settings instead of answering "invalid license".
Fixed keys for two variations of one product bought on different schedules each follow their own subscription.
Fixed the license API's version check only includes the download package for a site activated on the key. A request without a site address (or with one that can't be read) still learns the new version, but can't download updates without using an activation.
Fixed with no file picked as the update package, Software Licensing serves the file tagged or named with the current version ("my-plugin 1.5.0") instead of the first file, so adding a release after the old ones updates sites to the right version.
Fixed the drop-in license client fetches a fresh download link when WordPress installs an update from a check made hours earlier, instead of failing with "Download failed. Forbidden". Copy the updated client (1.3.0) into your plugins and themes.
Fixed the license client works with stores that don't use pretty permalinks. There, /wp-json/ returns a web page, so every call failed with "unexpected response"; the client now falls back to ?rest_route= and remembers it.
Fixed when the store can't be reached, "View details" in the plugin list shows an error instead of falling through to wordpress.org, which may list a different plugin under the same slug. An invalid or expired key no longer hides the details either.
Fixed the license API's anonymous "View details" lookup by slug picks the first product with licensing turned on, so a newer product sharing the slug without licensing (a copy, a bundle) no longer hides the real one.
Fixed sites on international domain names (bücher.de) can activate keys; they match their punycode form.
Fixed a client configured with a product id keeps validating after a plan switch moves the key to another product of the same software.
Fixed when a stackless_software_licensing_allow_activation filter refuses a site, the customer sees the filter's own message and status instead of "The license request failed."
Fixed "Last updated" in the update details modal no longer shifts by the store's time zone offset.
Fixed sites on two-part country domains such as test-prep.co.uk or dev-shop.com.au no longer count as free development sites.
Fixed keys from a guest order move to the customer's account when WooCommerce links past orders to it, or when an admin changes the order's customer, so they appear under My Account → Licenses.
Fixed license expiry dates no longer show a day late for stores whose daylight saving offset differs between today and the expiry date.
Fixed ticking "Never expires" on an expired license makes it active again, as setting a future date already did.
Fixed Software Licensing no longer serves an update package that WooCommerce has disabled, for example because its folder was removed from the approved download directories. WooCommerce already refused that file's own download links; the license API and My Account → Licenses now refuse it too.
Improved files named like "my-plugin 1.4.2" or "my-plugin-1.4.2.zip" count as previous versions without tagging each one. A version is only read when the name matches the software slug or the update package's name, and a tag or release history line still wins.
Improved My Account → Downloads shows one row per file for licensed products, however many orders granted it, newest version first, with a Version column and the update package marked Latest.
Improved My Account → Licenses shows the latest version, a count of previous versions with their release dates, and explains why an expired, revoked or inactive license has no download button.
Improved setting the current version through the WooCommerce REST API dates it in the release history, as saving the product in the editor does. The product's Licensing tab shows the version read from each file name and marks the update package.
On-page Checkout starts switched off. Both features require FluentCart 1.6.4 or later.
Read full notes12 changes
New On-page Checkout
Put a plan picker and FluentCart's checkout form on any page with the On-page Checkout block or the [gtfc_checkout] shortcode. Buyers choose a plan, fill in their details and pay without leaving the page.
Plan cards show compare-at prices, billing periods, free trials, signup fees and a "Save N%" badge on longer plans priced below the monthly plan. Plans can come from one product or a list of variations across products.
Each visitor gets their own cart for the plan, separate from their store cart. Switching plans or reloading keeps what they typed, and a signed-in customer's cart is never resumed by anyone else.
The form loads when it scrolls into view or when the optional button is clicked, and the host page loads no checkout scripts. A coupon can be set on the block or comes from a ?coupon= link.
After Place order, the whole page continues to the receipt or the gateway's payment page.
New Paddle gateway
Paddle joins Polar in the Payment Gateways module, with separate live and sandbox credentials. Buyers pay in Paddle's overlay checkout, and Paddle handles sales tax and VAT as merchant of record.
Orders go to Paddle as their own line items, with nothing created in your Paddle catalog.
Subscriptions support daily to yearly plans, signup fees and free trials. Renewals become paid FluentCart renewal orders, and cancellations, pauses and past-due states sync both ways.
Refunds from FluentCart become full or line-item partial Paddle refunds; refunds approved in Paddle are recorded once. Payments for the wrong amount, currency or site are not confirmed.
Runs alongside FluentCart Pro's own Paddle gateway as "Paddle (GT Extensions)", with separate settings, webhooks and records.
Both modules start switched off. They require FluentCart 1.6.4 or later.
Read full notes12 changes
New Coupon Affiliates
Customers with a paid order join from Refer & Earn in their account and get a personal FluentCart coupon. Friends get a discount; the customer earns cash commission on every paid order that uses it, repeat orders included.
Commission is a share of the products bought, after discounts and before tax, shipping and fees. Discount, commission rate and refund hold are settings (10%, 10% and 30 days to start), with per-affiliate rates.
Commissions count only once FluentCart records the payment. Holds end in a review queue; nothing is approved or paid automatically.
FluentCart → Affiliates covers affiliates, commissions, payouts and settings. Reserve a payout, export it as CSV, pay outside WordPress, then record the transfer. Bank details are never collected.
Partial, full and late refunds are reconciled automatically, self-referrals are refused, and test orders stay in a separate test ledger.
Customers see their code, a share message and link, balances, and anonymous referral references. Referred buyers are never named.
New FluentCart Optimizer
Optional "Store pages only" mode leaves FluentCart's storefront bundle off pages that sell nothing. Store pages, products, carts with items, campaign and coupon landings, and page-builder pages keep it.
Page and path overrides, an "always load" box in the page editor, and a toolbar note for admins showing each page's decision.
A copyable cache and script report for your cache plugin or CDN, a build check, and cart retention from 30 to 365 days.
Every change can be restored in one click, and the optimizer never purges a cache.
Unused CSS is served on pages whose plugins create new element IDs on every page load, such as the TranslatePress language switcher and Fluent Forms. Before, the CSS was built but never used, and each visit queued another build. Thanks to @rochakshrestha for the report.
Read full notes3 changes
Unused CSS is served on pages whose plugins create new element IDs on every page load, such as the TranslatePress language switcher and Fluent Forms. Before, the CSS was built but never used, and each visit queued another build. Thanks to @rochakshrestha for the report.
In "Store pages" mode without the page-cache drop-in, Site Health and the dashboard now say that page optimizations are not running, and no unused-CSS builds are queued that could never finish.
Setup reports when a firewall, bot protection, or password protection blocks the site's requests to itself (HTTP 401, 403 or 429), instead of reporting a successful check with no host cache.
New: Coupon Affiliates module, ported from GT Extensions for FluentCart. Customers with a paid order join from My Account → Refer & Earn and get a personal coupon, or you assign any coupon to an account on the coupon's edit screen, with an optional rate per affiliate or per coupon. Paid orders (processing or completed) earn a percentage of product sales after discounts, before tax, shipping and fees. Commissions are held for a refund window, approved and paid by you, with payout batches and CSV exports. Line refunds, amount-only refunds and cancellations reduce or reverse a commission automatically, and a refund after payout is deducted from the next payout. Affiliates can't use their own code on either checkout, renewals and plan switches earn nothing, and with Multi-Currency each commission also records its base-currency amount. While another affiliate plugin is active, new commissions are held for review until you confirm it doesn't pay on the same orders. Works with HPOS and posts order storage, and includes personal data export and erasure.
Read full notes2 changes
New Coupon Affiliates module, ported from GT Extensions for FluentCart. Customers with a paid order join from My Account → Refer & Earn and get a personal coupon, or you assign any coupon to an account on the coupon's edit screen, with an optional rate per affiliate or per coupon. Paid orders (processing or completed) earn a percentage of product sales after discounts, before tax, shipping and fees. Commissions are held for a refund window, approved and paid by you, with payout batches and CSV exports. Line refunds, amount-only refunds and cancellations reduce or reverse a commission automatically, and a refund after payout is deducted from the next payout. Affiliates can't use their own code on either checkout, renewals and plan switches earn nothing, and with Multi-Currency each commission also records its base-currency amount. While another affiliate plugin is active, new commissions are held for review until you confirm it doesn't pay on the same orders. Works with HPOS and posts order storage, and includes personal data export and erasure.
Fixed a copy of the store at another address, such as a staging, local or migrated copy, no longer charges customers or emails them. Stackless records the live store's address and environment type. On a site that doesn't match, renewals, payment retries, dunning, invoice and quote reminders and back-in-stock alerts are held, no saved card is charged, and Stackless customer emails aren't sent. An admin notice offers "This is the live store", and held renewals then run for the periods that came due. Hosts can decide with the STACKLESS_LIVE_STORE constant or the stackless_live_store filter.
New: Software Licensing version archive. Tag older downloadable files (or list package URLs in a release history) with their version, and customers with a valid license can roll back from My Account → Licenses → Previous versions. Links are signed per version, and the license API's info route returns a WordPress.org-style "versions" map.
Read full notes14 changes
New Software Licensing version archive. Tag older downloadable files (or list package URLs in a release history) with their version, and customers with a valid license can roll back from My Account → Licenses → Previous versions. Links are signed per version, and the license API's info route returns a WordPress.org-style "versions" map.
New an option to tie WooCommerce downloads of licensed products to the license. Files leave My Account → Downloads and their links stop working once a license is revoked, refunded or expired. A second option lets expired licenses keep versions released before they expired.
Fixed on stores that keep orders in posts storage (HPOS off), subscription renewals were never created or charged, and Stripe, PayPal, Paddle and Polar webhooks could match the wrong order. Order lookups now work on both storage types and confirm the order they find.
Fixed a Stripe webhook is acknowledged only after it has been processed. If the event log can't be written, or another request is still working on the event, Stripe gets a retryable error and sends the event again instead of having it marked as a duplicate. An event whose handler died is picked up by exactly one retry.
Fixed a renewal whose order was created but never charged or invoiced, for example because the server stopped mid-run, is now collected the next time the renewal runs, on the same order. Paid, failed and already-collected renewal orders are never charged again.
Fixed a recurring invoice that fails to save, issue or email no longer uses up its billing period. The run retries automatically with a growing delay, reuses the draft it already created, never emails the same invoice twice, and a schedule set to end after a number of invoices only ends once the last one exists. Periods that fall due while a failed run is retried are billed afterwards instead of skipped.
Fixed when a module's database setup fails during an update, Stackless no longer marks the update complete. Modules that set up correctly are recorded, the failed ones retry on the next page load, and an admin notice lists them until they succeed. A database table that wasn't created now counts as a failure too.
Fixed the Subscriptions dashboard widget counts every renewal due in the next 7 days and lists the soonest first. It used to check only the 500 newest subscriptions, so older ones due soon were left out. This works with both HPOS and posts order storage.
Fixed the dashboard's 30-day churn now counts every subscription that ended in that window. It used to stop at 1,000.
Fixed with "Development sites are free" turned off, the Licenses table, the order's Licensing panel and agent license details count development sites toward the site limit, matching what activation enforces.
Fixed the stated minimum is now WordPress 6.7, the oldest version WooCommerce 9.9 runs on. It used to say 6.6.
Fixed a recurring invoice schedule set to keep drafts no longer completes a billing period when the draft couldn't be saved. The period stays open and the run retries.
Fixed when two page loads finish a Stackless update at the same moment and one of them fails a module's setup, that module now retries on the next page load. Before, the other page load could mark the update complete and the failed module was never retried.
Fixed the admin notice for a module table that wasn't created now includes the database's reason, such as a permission or syntax error.
Added: Core Support integration. "Create Core Support ticket" appears under Support & Tickets in a form's Actions tab, and shows what to install when Core Support is not active.
Read full notes4 changes
Added Core Support integration. "Create Core Support ticket" appears under Support & Tickets in a form's Actions tab, and shows what to install when Core Support is not active.
Added Core Support tickets can run in the background with retries, like the other ticket actions.
Added The Support request template opens a Core Support ticket instead of sending its own confirmation email when Core Support is active.
Added The cf_queueable_action_types filter lets companion plugins run their actions from the background queue.
Fixed: the order received page. The order summary strip keeps its dividers clear of the text and wraps cleanly; the order details table has one line per row with totals aligned right; Additional information and Checkout consents show as matching cards; and every receipt section has even spacing.
Read full notes1 change
Fixed the order received page. The order summary strip keeps its dividers clear of the text and wraps cleanly; the order details table has one line per row with totals aligned right; Additional information and Checkout consents show as matching cards; and every receipt section has even spacing.
Uninstall always removes leftover generated script files, whether or not data removal is enabled.
Read full notes3 changes
Uninstall always removes leftover generated script files, whether or not data removal is enabled.
Garbage collection reclaims unused generated CSS and font files again. It now uses modification time, which pages refresh when they link a file, instead of access time, which backups refresh. Files from before the update get 14 days from the first collection after it.
Unused CSS is rebuilt far less often. Renaming a stylesheet the engine leaves in place, such as a versioned CDN or excluded stylesheet, no longer rebuilds every page, and neither does a plugin update that leaves the CSS engine unchanged. Builds stay reusable for a week instead of a day. Each page is rebuilt once after the update.