FluentCart 1.4.2 – Introducing FluentCart customer rights, EU Withdrawal Compliance

Most releases follow a roadmap. This one follows a calendar.
On June 19, 2026, a new rule takes effect across Germany and the EU: every B2C store selling online must offer a clearly visible withdrawal function, a “Withdraw from contract here” button any customer can reach without logging in. It is not optional. Stores that miss it face cease-and-desist letters and a withdrawal window that can stretch to a full year. A customer flagged it, we treated the date as fixed, and we built toward it.
The answer is FluentCart customer rights, a new add-on that ships ahead of the deadline so German and EU stores are ready on day one instead of scrambling after it. No legal guesswork, no last-minute panic.
Meet FluentCart customer rights
The hard part of a rule like this is not wanting to comply. It is knowing what compliant actually means and getting every detail right. The statute is exact about wording, about how many questions you may ask, and about what must happen when a request cannot be matched to an order. FluentCart customer rights carries those details so you do not have to read the law line by line.
What the customer sees. A clean public page that needs no login and works on a phone. The customer enters their name, an order number, and an email, moves through a short two-step flow, and finishes at the precise confirmation step the rule names. The instant they confirm, they receive a timestamped acknowledgment of receipt. That message stays on while the feature is active, because the law treats it as part of the customer’s right, not a setting you can switch off.

No one is ever turned away. When the order number and email match an order, the customer sees a quick summary of what they bought. When they do not match, the request is still accepted and quietly set aside for you to review by hand. The law says the customer has the right to declare and that sorting out the details is the merchant’s job afterward, and the add-on is built around exactly that idea.
Withdrawals that respect real orders. A withdrawal is rarely all or nothing. Customers can choose which items and quantities they want to withdraw and see an estimated refund that already includes tax before they confirm. For an order tied to a subscription, they can say whether they want to stop now or let the current cycle finish. Those choices reach you as clear guidance. Nothing is cancelled automatically, so you stay in charge of the actual refund and the actual subscription change.


Calm under repeat clicks. If someone submits the same withdrawal twice, the store shows them the request already on file instead of opening a second. A request that has already been decided shows its status rather than disappearing. From the customer dashboard, an order page, or a subscription page, a “Withdraw from contract here” button opens the form already filled in.
Managing requests without leaving FluentCart
Accepting declarations is only half the work. The other half is getting through them, and 1.4.2 adds a Withdrawal Requests page inside FluentCart for exactly that. Review every incoming request, accept or decline it, expand a row to see the precise items and quantities the customer selected, and link an unmatched declaration to the right order once you have found it.


Setup lives on its own Withdrawal (EU) settings page. From there you decide where the button appears, how the form behaves, which product categories the law exempts, the time windows that apply, and which order statuses qualify in the first place. Four built-in emails cover the full cycle: the instant customer acknowledgment, an admin alert on every new request, and the accepted or declined notices that go back to the customer.

From a customer’s first click to your final decision, the whole workflow stays inside one product.
Improvements
Steadier payments. Paddle now handles orders across different currencies more accurately, and Authorize.net passes full order details, the invoice number, and line items through to the gateway, so your payment records line up with the orders behind them. Setup instructions for both Paddle and Authorize.net read more clearly, and currency amounts in the new withdrawal table display in a consistent, formatted way.
Room to build on. New extension points let add-ons hook into subscription, order, and settings screens. It is quiet groundwork, and it is part of how the add-on itself fits in so cleanly.
Fixes and Stability
Profile polish. The customer profile page no longer breaks when a cookie banner blocks profile avatars, so the page loads cleanly no matter which privacy tools a visitor runs.
Payments. Paddle currency is now read correctly during cross-currency checks, so totals stay right when an order and the gateway use different currencies.
Security and maintenance. This release includes ongoing security audits and routine hardening across both FluentCart core and FluentCart Pro.
Closing
1.4.2 is a release defined by a date, and it meets it. FluentCart customer rights gives German and EU stores a withdrawal function that matches the statute in wording and in spirit, accepts every customer declaration, and routes each one into a clear management flow, all before June 19 rather than after it. Around it, payments grow a little steadier and a few fixes keep the everyday store running smoothly. When a real obligation lands on our customers, we answer it quickly, and we build the answer to last.
Getting FluentCart customer rights add-on
FluentCart customer rights installs in a click from inside your store. Open Settings → Features and Addons → Plugin Addons, find it in the list, then install and activate it right there, with no uploads or license juggling.
Prefer to do it by hand? Download the add-on and upload it like any other WordPress plugin: fluent-cart-customer-rights.zip
Once it is active, open the new Withdrawal (EU) settings page, place your button, and you are ready for June 19.
Full Changelog
Features
- FluentCart customer rights: the EU and German withdrawal function, a public withdrawal page that needs no login, a statutory two-step flow, and a timestamped acknowledgment of receipt
- Every declaration is accepted: matched orders show a summary, unmatched ones are queued for manual review and never turned away
- Item and quantity selection with a tax-aware estimated refund shown before the customer confirms
- Subscription withdrawals: customers can request to stop now or at the end of the current cycle, passed to the store owner as guidance
- Duplicate protection and status-aware prompts for requests already submitted or already decided
- “Withdraw from contract here” entry points on the customer dashboard, order detail, and subscription pages
- Withdrawal Requests admin page: review, accept, decline, inspect selected items, and link unmatched requests to orders
- Dedicated Withdrawal (EU) settings page: button placement, form behavior, category exclusions, time windows, and eligible order statuses
- Four built-in emails: customer acknowledgment, admin notification, and accepted or declined decision notices
- Authorize.net now sends full order details, invoice number, and line items to the gateway
- New extension points for add-ons across subscription, order, and settings screens
Fixes
- Customer profile page no longer breaks when a cookie banner blocks profile avatars
- Paddle currency is read correctly during cross-currency checks
- Clearer setup instructions for Paddle and Authorize.net
- Consistent currency formatting in the withdrawal admin table
- Ongoing security audits and hardening across FluentCart core and Pro
In case you missed
1.4.1 (Jun 11, 2026)
- FluentCart MCP Server with 28 tools for AI agents (orders, customers, products, subscriptions, coupons, reports)
- Dry-run preview and confirmation flow for sensitive MCP actions
- Idempotency keys for MCP write operations
- Live-gateway MCP mutations gated behind explicit opt-in
- MCP settings page with instant toggle and connection snippet generator
fluent_cart/mcp_loaded,fluent_cart/mcp_ability_names, andfluent_cart/mcp_allow_live_gatewaydeveloper filters- Built-in tax rate presets for 54 additional countries
- Cross-tab cart synchronization
- Post-update upgrade routine now runs exactly once per update under concurrent traffic
- Ongoing security audits and routine hardening across FluentCart core
1.4.0 (Jun 11, 2026)
- EU B2B reverse charge flow across all order surfaces
- Per-item tax rate breakdown on checkout, admin, emails, PDF, and receipts
- Mixed cart tax handling for inclusive/exclusive products
- Per-variation tax inclusion override
- Tax class selector for shipping overrides
- City/postcode granularity for tax overrides
- Specific-country EU VAT collection mode
- Built-in tax rates for Africa, Americas, Asia, Europe, and Oceania
- Enable/disable toggle per country tax page
- Auto-calculate admin order tax on save
- Tax setup step in onboarding
- Price suffix split for inclusive/exclusive labels
- Seller Tax ID in store settings
- RC badge on Taxes admin page
fluentcart_eu_vat_number_validatefilter for third-party VAT validationfluent_cart/tax_collectingfilter for runtime tax controlreset_taxWP-CLI command- Store Digest emails (daily, weekly, monthly)
- Per-item coupon discount in line_meta with strikethrough display
- B2B badge on admin and customer order pages
- B2B purchase and reverse charge filters in orders table
- Unit price rounding tooltip on 1-cent mismatch
- Hash-based deep linking for settings sections
- Configurable product list columns
fluent_cart/show_admin_top_barfilter- Bricks BuySection with query-type product selection
- Bricks product selection controls on Gallery, Content, ShortDescription, Stock, PriceRange
- Bricks iframe embed support in product content element
- Pricing table product-per-row layout and configurable badge
- Live settings propagation without page reload
- Auto-select single shipping method at checkout
- Global search results gated by user permission
- 25+ tax-specific fixes (reverse charge, breakdown display, mixed cart, shipping labels, rate badges, tooltip, coupon base)
- Subscription currency in billing column
- Zero-value renewal orders hidden on reactivation
- Subscription expiry race condition, orphaned meta, and zero-date next_billing_date
- Canceled subscriptions expire immediately without grace period
- Missing subscription on renewal order and parent order item fallback
- Falsely blocked payment retry
- Stripe refunds fetched separately when not in charge object
- Paddle: EDD migration renewals, double-submit prevention, overlay stuck on cancel, receipt page validation, end-of-period cancellation emails (Pro)
- Mollie pre-payment tax for mixed carts (Pro)
- Checkout: saved address priority, state validation, B2B field preservation, country detection
- Modal checkout coupon strikethrough
- Coupon null dereference when no coupons applied
- Order currency displayed instead of store currency
- Fulfillment type inherited from variation on admin orders
- Shipping method title on admin order detail
- PDF: full billing name, fee lines moved to summary, seller identity bridged (Pro)
- Logo SVG path warning from build ZIP install
- Webhook 301 redirects on subdirectory installs
- Turnstile widget fallback on auto-verify failure
- NULL values in subscription report rounding
1.3.28 (May 14, 2026)
- Search Bar widget for Elementor.
- Store Logo widget for Elementor.
- Customer Dashboard Button widget for Elementor.
- Product Package Description widget for Elementor, standalone or inside Product Info.
- Draggable, reorderable summary sections inside the Elementor Product Info widget.
- Elementor Popup support for Single Product: variations, gallery, and quantity now work in popups.
- Sort By toggle for the Bricks Products Collection element.
- fluent_cart/show_admin_top_bar shortcode for hiding top menubar.
- LearnDash course management: missing pieces completed.
- Mollie payment list now respects the store’s currency.
- Coupon failures show the specific reason at checkout.
- FluentCart Elementor widgets grouped under one “FluentCart Product” category.
- 1-column checkout layout renders correctly in Elementor templates.
- All Bricks elements grouped under one “FluentCart” category.
- Cleaner admin menu spacing on mobile.
- Decimal trimming logic to only remove trailing zeros when decimal point exists, preventing incorrect formatting of integer tax rates.
- Global search is now with slash (/) instead of (cmd + k).
- Elementor Single Product widgets (Title, Price, SKU, Stock, Buy Section, Gallery) now sync to the active variation.
- Buy button reflects the active variation’s purchase state.
- Stock badge clears when a variation has no stock data.
- Stock label renders as text, not raw markup.
- Empty Elementor product widgets (Excerpt, SKU, Stock, Price) no longer leave empty wrappers.
- Product-template widgets hidden in Elementor outside Single Product documents.
- Product Info widget renders correctly in the Elementor editor; Select2 change events fire reliably.
- Pricing Table shortcode and block render correctly, including group_by tabs.
- Single Product shortcode renders fully: variations, thumbnails, and quantity all work.
- Product descriptions render correctly when third-party shortcodes or blocks need product context.
- Customer Dashboard, Product Card, Product Search, and Pricing Table blocks render in FSE templates and parts.
- Admins can always view a receipt, even on a record that would normally show the not-found page.
- Search Bar widget honors the “Same Tab” setting.
- Enter key in the product title field no longer submits the form.
- Bricks Product Title element renders consistently across layouts.
- French overseas territory VAT mapping issue.
I’m Jewel, founder of FluentCart and CEO at WPManageNinja, the team behind Fluent Forms, Fluent CRM, Fluent Support, FluentLogs and a handful of other WordPress plugins. I have been writing WordPress code since 2009 and still think of myself as a developer first and an entrepreneur second. Most of what I write on this blog comes from arguments we have had inside the team about how to build software people can actually depend on.

Subscribe now






Leave a Reply