Skip to main content

I need to customise, and add information, preferably a whole tab or two, in the customer account dashboard. Is there a way to do this?

A Bricks solution would be ideal, but even if it takes some custom code I would love to be able to control what they see when they log in to their dashboard and add some information.

Is this possible now with custom code?

I find it inelegant that a customer needs a conventional wordpress account in order to see and manage their service subscription (or past purchases). The automatic "New User Registration" emails that wordpress sends, breaks the illusion this is a proper ecommerce site. What are your best practices for creating a better user experience when logins are required, but you don't want the customer to interact with the classic wordpress interface elements or experience?

I'm going to use Pirate Ship for order shipping. They support importing csv to bulk buy shipping labels. But I can't find how to export orders from fluent cart at all. Just the analytics reports. How do people coordinate shipping labels with this software??? I've looked through everything I can find and can't see this.

I need to be able to have all the info a shipping label needs export to csv. Customer address, store address, package size and weight, etc.

Assume the base currency for a store is USD, and I'm only selling simple digital products. Now there is a customer who bought a product 1 worth 50$. When they open their account page, the product is purchased at 50$.

In the admin order backend it shows as the product is bought at 50$.

All good till this.

If admin changes the base currency to EUR, from the Admins perspective order 1 is shown to be bought at 50$. Now on the customers end, every where that 50USD is supposed to show, now shows 50€

I won't consider this as a edge case, as I was working on multicurrency checkout and customers switching currency can cause this, well at-least in my architecture.

Do these 2 plugins integrate with each other to collect payment on a form by using Fluentcart checkout (instead of the default option settings: Stripe, paypal, mollie, etc)?

Tested against FluentCart 1.6.1 and FluentCart Pro 1.6.1 on a German store
(WordPress locale de_DE, date format "j. F Y", time format "H:i", timezone
Europe/Berlin).

This is not about missing strings. The month and weekday names are already
translatable and work fine. What cannot be reached is the format: the order
of day and month, and the 12-hour clock. Both are literals in the source, so no
translation and no filter can change them.

In German, "Aug 16, 2026 03:30 PM" is wrong three times over: the month name is
English, day and month are in the wrong order, and nobody writes AM/PM. Our
customers see it in transactional e-mails, on the thank-you page and in their
account dashboard.

1 PHP: DateTime::format() with a hard-coded pattern

PHP's DateTime::format() has no locale at all, so "M" always returns "Aug",
even with a German site language. These call sites are therefore impossible to
localize:

app/Views/emails/order/reminder/due/admin.php:10 'M d, Y h:i A'
app/Views/emails/order/reminder/due/customer.php:10 'M d, Y h:i A'
app/Views/emails/order/reminder/overdue/admin.php:10 'M d, Y h:i A'
app/Views/emails/order/reminder/overdue/customer.php:10 'M d, Y h:i A'
app/Views/emails/subscription/reminder/admin.php:11 'M d, Y h:i A'
app/Views/emails/subscription/reminder/customer.php:11 'M d, Y h:i A'
app/Views/emails/subscription/trial_end/admin.php:13 'M d, Y h:i A'
app/Views/emails/subscription/trial_end/customer.php:13 'M d, Y h:i A'
app/Views/emails/subscription/canceled/admin.php:12 'M d, Y'
app/Views/emails/subscription/canceled/customer.php:13 'M d, Y'
app/Views/emails/subscription/renewal/admin.php:34 'd M Y, H:i'
app/Views/invoice/parts/subscription_items.php:39 'M d, Y h:i A'
app/Services/Renderer/Receipt/ThankYouRender.php:625 'M d, Y h:i A'

app/Services/ShortCodeParser/Parsers/SubscriptionParser.php:43,55````app/Services/ShortCodeParser/Parsers/LicenseParser.php:42````date('M j, Y', strtotime(...))

app/Modules/Integrations/FluentPlugins/FluentCRMDeepIntegration.php:607,611,664````gmdate('M j, Y', strtotime(...))

Suggested fix: wp_date(get_option('date_format'), $timestamp), plus
get_option('time_format') where a time is shown. That is what
ReceiptRenderer.php:246 and :813 already do, and the receipt is the one place
where the date comes out right on our store. Making the rest match it would fix
this class of issue completely.

Two of the three date() calls have a second problem: date() and gmdate() use
the PHP default timezone, not the store timezone, so the shortcodes
{{subscription.next_billing_date}}, {{subscription.expire_at}} and
{{license.expiration_date}} can be a day off around midnight.

2 JavaScript: the dayjs format string is a default parameter

Every date in the admin SPA and in the customer dashboard goes through one
helper per bundle:

chunks/Utils.js function S(e, r = "MMM DD") { ... .format(r) }
Start.js function j(e, s = "MMM DD") { ... .format(s) }

The month and weekday names come from window.fluentcart_admin_vars.datei18 at
call time, so those are translatable. The pattern is not: it is a default
parameter inside the module. Concrete results with a fully translated catalog:

ConvertedTime (orders, customers, subscriptions, activity log)
"MMM DD" in the current year, "MMM DD, YYYY" otherwise,
"+ h:mm A" when a time is shown,
and the title attribute always "MMM DD, YYYY h:mm A"
reports and charts
"MMMM D, YYYY", "MMM YYYY"

Because the names are translated but the order is not, a German store ends up
with the worst of both: "August 16, 2026".

The bundle is an ES module, so there is nothing a site can override from the
outside: no window.dayjs, no global formatter, no filter.

Suggested fix: send a display pattern along with the names, for example

'datei18' => [
'weekdays' => [...], 'months' => [...],
'formats' => [
'date' => 'MMM DD, YYYY',
'dateShort' => 'MMM DD',
'time' => 'h:mm A',
],
]

derived from get_option('date_format') / get_option('time_format') (there are
small, well-known converters from PHP date format to dayjs tokens), and have
the helpers fall back to their current literals when the key is absent. That
would keep every existing installation identical and let localized stores use
their own format.

3 TransStrings::dateTimeStrings() has no filter

Every other map in app/Services/Translations/TransStrings.php passes through a
filter: fluent_cart/admin_translations, fluent_cart/blocks_translations,
fluent_cart/customer_profile_translations, fluent_cart/checkout_translations,
fluent_cart/payments_translations. dateTimeStrings() does not. Adding

return apply_filters('fluent_cart/date_time_strings', $strings);

would at least give sites a way to correct the names, and it would be the
natural place to inject the formats from point 2.

4 Small note on monthsShort

dayjs resolves MMM as

monthsShort && (monthsShort[index] || monthsShort(instance, format))
|| months[index].slice(0, 3)

If a translation ever yields an empty string for one of the twelve entries, the
falsy branch calls the array as a function and throws. gettext returns the msgid
for an untranslated string, so this cannot happen today, but it is worth a
guard if the array is ever built programmatically.

Happy to test a patch on our staging install.

Thank you for FluentCart and for constantly improving and developing it!

If you're using a hybrid block theme instead of a full FSE/block theme, you may notice that FluentCart's native Product Description block isn't available everywhere in the block builder.

The block itself already exists in FluentCart and works perfectly fine. FluentCart simply restricts it to certain FluentCart parent/ancestor blocks.

If you want to use the native Product Description block freely inside your own product template, you can remove that restriction with this small snippet:

/**
 * FluentCart 1.6.x
 * Make the native Product Description block available everywhere
 * in the WordPress block editor.
 *
 * No custom block is created.
 * No product data is changed.
 * FluentCart's original block and rendering are still used.
 */

add_filter('register_block_type_args', function ($args, $block_type) {

    if ($block_type !== 'fluent-cart/product-description') {
        return $args;
    }

    unset($args['ancestor']);
    unset($args['parent']);

    return $args;

}, 20, 2);

After adding the snippet, search for:

Product Description

in the block inserter.

You can then place FluentCart's native Product Description block directly inside your own hybrid-theme product template, wherever you want it.

For example:

Product Gallery + Product Info

Product Description

Related Products

The nice thing about this approach is that it doesn't introduce a shortcode, duplicate content, or create a separate description system.

You're still using FluentCart's own native Product Description block, including its normal block styling and settings. It simply becomes available outside of the parent blocks FluentCart normally restricts it to.

Might be useful for anyone building FluentCart product templates with a hybrid theme rather than a full FSE theme.

Hey, I discovered that 1st subscription order has the right company data, but after renewal it drops company name, vat number and legal registration ID.

Can u fix it?


RenewalService::copyParentOrderSnapshot()

$billingAddressData = [ 'type', 'full_name', 'address_1', 'address_2',
'city', 'state', 'postcode', 'country',
'email', 'first_name', 'last_name' ];

Hi team β€” small but sitewide visual bug: the cart drawer's overlay (the dim backdrop) animates itself on every page load, so a full-screen dark layer flashes across the screen on every navigation even when the cart is closed and untouched. Traced to one line in the drawer stylesheet.

Environment

FluentCart 1.6.1 (+ Pro 1.6.1), WordPress 7.0.4, PHP 8.5.9. Side/drawer cart enabled; happens whether the cart is empty or has items, on every front-end page. It's a CSS behaviour, so not browser- or theme-specific.

Steps to reproduce

  1. Enable the drawer (side) cart.
  2. Load any front-end page, or navigate between pages.
  3. Watch the top-left of the viewport as the page paints.

Expected: the closed overlay stays hidden and inert on load.
Actual: a translucent black layer expands from the top-left and fades out over ~0.5s β€” a full-screen flash β€” on every load.

Root cause

The overlay is a full-viewport, top-left-pinned, high-z-index element that uses transition: all:

.fct-cart-drawer-overlay {
  position: fixed; inset: 0; z-index: 999999;
  width: 100%; height: 100%;
  opacity: 0; visibility: hidden;
  background: rgba(0,0,0,.5);
  transition: all 0.5s;   /* ← animates on first paint */
}

transition: all animates any property that changes β€” including the ones settling from browser defaults into this hidden state on first paint. So on every load the overlay animates opacity/visibility/width/height from default β†’ hidden. Confirmed: document.getAnimations() immediately after load shows five running transitions on .fct-cart-drawer-overlay, an element nobody interacted with. .fct-cart-drawer has the same pattern but sits off-screen (left:100%), so its load transition is invisible.

Suggested fixes (any one resolves it)

  1. Scope the transition to what open/close needs: transition: opacity .3s, visibility .3s (plus transform for the panel) instead of all.
  2. Or don't transition while closed: .fct-cart-drawer-overlay:not(.active){ transition: none; } β€” the open animation still runs via .active.
  3. Respect motion prefs: @media (prefers-reduced-motion: reduce){ .fct-cart-drawer-overlay, .fct-cart-drawer { transition: none } }.

Impact is broad: the drawer is global, so this flashes on every front-end page for every visitor on any site with the side cart enabled β€” and it ignores prefers-reduced-motion. Immediate workaround is fix #2 in site CSS (verified: drops the five load-time transitions to zero, flash gone, cart still opens/closes normally). Happy to test a patch. Thanks!

Just curious to know if theres audience for learndash and fluentcart.