Skip to main content

Hello! I see that we're able to insert products into the email templates, but is there any way to show the last product that the user was viewing before they abandoned their cart?

UPDATE: I found a fix (details in the comment).

Hello Shahjahan Jewel!

Is there a way to switch the placements of the Company details and Members list boxes?

We've been using the Company details along with Company Custom Data extensively and their location as a small sidebar requires a lot of scrolls before we can find important custom field values that were placed at the bottom of the list.

It would be great if there is a way to switch its placement with the list of members.

Allow Movable Blocks for Company and Member Boxes

I would like to have a copy of the messages we send when replying to a client's inquiry collected via a form that forwards the message to an email account. I would like to have our reply be recorded on the fcrm contact. Can it be done by cci a copy to an email address? Any other method?

Let me start with the news that has us most excited: WhatsApp messaging is coming to FluentCRM.

Yes, you read that right. Native WhatsApp integration is in the works for our next release. Imagine reaching your contacts where they actually read, sending campaigns, automations, and one-off messages right alongside your email flows, all from the same FluentCRM you already use. We'll share more soon. For now, just know it's coming.

But that's next. Let's talk about today.

3.1.7 is a polish and stability release

No new headline feature here. This one is about tightening the foundation, cleaning up the rough edges, and making the experience smoother across the board. A lot of these came straight from your reports and feedback.

A few things we improved:

  • Centralized email sending caps, so your sending limits are easier to manage in one place
  • Automation contact list table now matches the look and feel of our other tables
  • Added Created At and Updated At sorting in the funnels table

And a solid round of fixes across FluentCart checkout opt-ins, email editor rendering, design presets, CSV import mapping, sequence emails, reporting, and more. Small things on their own, but together they make FluentCRM feel cleaner and more reliable.

Update when you're ready, and reach out to support if anything feels off.

WhatsApp is coming. Stay tuned.

One small thing before you go

If FluentCRM has been good to you, would you consider leaving a quick review? It honestly means a lot to the whole team and me. Reviews help other people discover the plugin, and every one of them gives the team a real lift when they see their work appreciated.

No pressure at all, only if you feel like it. You can leave one here:
https://wordpress.org/support/plugin/fluent-crm/reviews/#new-post

Client forwarded an email generated with Fluentcrm automation, worked perfectly for years, but now, the bullet lists in the email are not sent.

Every other content is in the email, but no bullet lists.

When I send a test to myself, bullets are displayed, when I test via forms automation, lists are not in the email πŸ™ˆ

Shahjahan JewelΒ can you take a look at this?

Have checked the instructions but not clear at all: https://fluentcommunity.co/blog/bulk-add-members-in-wordpress/

https://fluentcommunity.co/docs/access-management-through-fluentcrm-tags/

also checked bulk actions in CRM (no option to add to spaces in community), and checked member list setting in Community, nowhere to add tag in spaces either - where do I action this? Feel like I'm going in circles. What am I missing? We only have pro in CRM not community.

1.00

1.00

1.00

Has anyone else run into this?

We discovered that when contacts are actively waiting at a delay or timed step in an automation, editing that step doesn't update them. The change only applies to contacts who reach the step after you save the edit. Contacts already queued there stay locked to the original datetime β€” even if you change it in the automation.

Setting the funnel to Draft doesn't help either. The pending actions still fire on the old schedule regardless of funnel status.

As best we can tell, here's what's happening under the hood: when a contact enters a timed step, FluentCRM calculates the datetime and writes it as a scheduled action record in the database. Editing the automation only updates the funnel template β€” it doesn't touch those already-written records. So contacts in an active step are essentially hardcoded to the original date.

Future steps work fine (edits apply correctly) because their scheduled actions haven't been created yet.

The related problem: there's no bulk way to remove contacts from an automation. You can remove them one at a time from the subscriber list, but there's no bulk action. So you can't cleanly pull everyone out and re-enroll them under the corrected funnel.

Our workaround for 2,500 contacts in an automation:

Duplicate the automation with the corrected step.
Re-enroll affected contacts in the new campaign.
In the old campaign, add a "Cancel Automation" step right after the timed step β€” so when the old actions fire, contacts immediately exit.

It works, but it's not a great solution when you just need to shift a date on a live campaign.

Has anyone found a cleaner fix? We've also created a support ticket. If you've hit the same issue, worth replying here β€” the more context FluentCRM has, the easier it is for them to prioritize.

First, I am impressed with the features of FluentCRM and FluentForms, so don't let the request below taint that impression.

That said, I would love to see more support for B2B (Business-to-Business) logic, where the prospects are not actually the Contacts/Subcribers, but the Companies are the actual clients. That would mean being able to document parameters (custom fields) against the Company (this is possible), but then also use those Company custom fields in anything related to Contacts (e.g. Advanced Filter criteria for campaigns). Of course, this depends on the Primary Company being set correctly on the Contact.

But also in the Company screen, the Advanced filter does not allow custom fields to be used as filter or sorting criteria (unless I got it wrong).

In short, for the moment FluentCRM seems very much oriented to direct consumer contact, where the "company" is an add-on. Seeing things more from the Company perspective would be very valuable for a B2B approach, maybe even starting campaigns from that perspective.

Just some thougts, but do keep in mind my opening statement.

Kind regards,
Alain

First of all, a big thank you: both we and our client genuinely love FluentCRM. It works really well, the functionality is excellent, it's outstanding value for money, and it's reliable. We're grateful for everything the development team does. πŸ™ The notes below are meant as constructive feedback after upgrading to 3.1.6 β€” to help make a great product even better.

A follow-up on the two issues I reported around 3.1.0, after testing 3.1.6 / Pro 3.1.6 on WordPress 7.0 + WooCommerce 10.8.1:
- the revenue re-sync bug, and
- ["v3 email editor cannot open legacy v2 Classic/HTML templates"](https://community.wpmanageninja.com/portal/space/fluent-crm/post/v3-email-editor-cannot-open-legacy-v2-c).

## βœ… Revenue re-sync `map('intval')` bug β€” FIXED in 3.1.6

The original bug: `CampaignAnalyticsController::getAttributedOrderIds()` used `->map('intval')`, and wpFluent's `Collection::map()` calls the callback with `(value, key)`, so `intval($value, $key)` used the array index as the numeric base β†’ garbage order IDs β†’ "Re-Sync Revenue" overwrote `_campaign_revenue` with a near-random (much smaller) value.

In 3.1.6 the code is corrected to a closure:

->map(function ($orderId) { return intval($orderId); })

Verified end-to-end:

- The plugin upgrade alone (no Re-Sync) leaves the cached revenue bit-identical (no corruption on upgrade).

- Pressing Re-Sync Revenue now recomputes a correct value from the real paid orders (net of refunds), instead of corrupting it. On the very campaign that dropped from 2,350,771 β†’ 107,903 under 3.1.0, 3.1.6 produced 2,186,354 (= sum of the 76 currently-paid attributed orders, net) β€” a legitimate current recomputation, not garbage.

Minor suggestion: Re-Sync recomputes from current order state, so re-syncing a historical campaign replaces the as-sent figure with the current net (refunds/cancellations since send). Not a bug, but a small tooltip/warning would help users avoid re-syncing historical campaigns expecting the original figure.

## β—‘ Classic/HTML template editor β€” PARTIALLY improved in 3.1.6

- The legacy `_edit_type=html` template now opens in the v3 editor and renders the Classic block with table-cell background colors preserved β€” the white-on-white invisibility from 3.1.0 is gone. Thank you!

- BUT two related issues remain, each filed as a separate report:

Β  1. The Gutenberg-path Classic/freeform edit popup is a ~58px thin strip on hard refresh (TinyMCE not initialized in the iframed editor) β€” a load-order race condition.

Β  2. Switching an existing campaign to "Classic Editor" (`raw_classic`) does not persist β€” the stale `settings.template_config.design_template` overrides the user's top-level choice on save.

For our weekly newsletter we now use the dedicated "Classic Editor" mode (which renders a full TinyMCE and sends correctly), plus a small site-side mu-plugin to make the editor-mode choice persist until item 2 is fixed.

# "Select Editor" choice (design_template) not persisted for existing campaigns β€” stale `settings.template_config.design_template` overrides the user's selection on save

## Environment
- FluentCRM: 3.1.6
- FluentCRM Pro / FluentCampaign: 3.1.6
- WordPress: 7.0
- WooCommerce: 10.8.1
- PHP: 8.3
- Database: MariaDB 11.4

## Summary

In the campaign editor, switching the editor via "Select Editor" (Default/Gutenberg β†’ Classic Editor / Raw HTML) and saving does not persist for an existing campaign: after save + reload the campaign opens again in the previous editor (typically Default/Gutenberg).

Asymmetry observed:
- Switching to a Gutenberg-based template (simple/plain/classic) β†’ persists.
- Switching to `raw_classic` / `raw_html` (`use_gutenberg=false`) β†’ does not persist.

## Root cause (diagnosed via network capture + source)

On save, the request to `POST /wp-json/fluent-crm/v2/campaigns/update-single-campaign` does carry the correct user choice as a top-level field:

design_template: "raw_classic" Β  Β  Β  Β  Β  Β // correct β€” the user's Select Editor choicesettings.template_config.design_template: "simple" Β  // STALE

But the server (`CampaignController::updateSingleCampaignSimulate`, ~L352–360) lets the nested value override the top-level one:

$updateData = Arr::only($data, [..., 'design_template']); Β  // = 'raw_classic' (correct)
if (!empty($data['settings']['template_config']['design_template'])) {
Β  Β  $updateData['design_template'] = $data['settings']['template_config']['design_template']; // = 'simple' β†’ reverts
}

Because `raw_classic` / `raw_html` use an empty `config` (see `Helper::getEmailDesignTemplates()`), the `template_config.design_template` is never refreshed when switching to them, so the stale `simple` survives and overrides the user's choice β†’ the column is saved as `simple` β†’ reload opens Gutenberg.

(The campaign editor loads the editor based on the `design_template` column, which is why the stale-override reverts the UI.)

## Reproduction

  1. Open an existing campaign that is in Default (Gutenberg) mode.
  2. Select Editor β†’ Classic Editor. Save (toast: success).
  3. Reload / reopen the campaign.
  4. Observe: it opens in Default (Gutenberg) again. DB shows `design_template = 'simple'` and `settings.template_config.design_template = 'simple'`, even though the save request's top-level `design_template` was `'raw_classic'`.

## Impact

Users cannot reliably switch an existing campaign to the Classic / Raw HTML editor; the choice silently reverts. (Choosing the editor at campaign creation does persist β€” only post-creation switching is affected.)

## Expected

On save, the user's explicit top-level `design_template` (the Select Editor choice) should win, and `settings.template_config.design_template` should be synced to it β€” so the chosen editor mode persists in either direction (mode-agnostic), regardless of whether the target mode has an empty config.

## Our mitigation (site-side, until fixed)

A small mu-plugin hooks `fluent_crm/campaign_data_updated` and, when the saved `design_template` differs from the request's top-level `design_template`, restores the user's choice and syncs `template_config`. It is mode-agnostic and self-deactivating (no-op once the core override is fixed).

## Attachments
- Captured save payload (top-level `design_template=raw_classic`, `template_config.design_template=simple`).
- Before/after DB values.