FluentCRM and FluentCommunity do not provide the same functionality as membership or content restriction plugins. Maybe it's worth implementing?
What I mean is the ability to control which parts of a page are visible by using shortcodes.
This can be especially useful, for example, on a unique βMy Accountβ page, or for extending a course with access to additional WordPress pages.
This effect can be achieved using a simple code snippet.
With it, you can show or hide specific content on a page using shortcodes.
You can also create a condition such as: if a user has tag 1, an image is displayed, but if they have tag 1 and also tag 2 or tag 3, the image will not be displayed.
Let me explain why such a condition makes sense.
I have a product available in several versions:
- Silver (basic course),
- Gold (basic and advanced course),
- Platinum (basic, advanced, and supplementary course),
- Diamond (basic, advanced, supplementary, and masterclass courses).
On the βMy Accountβ page, thumbnail images of the course covers are displayed.
If someone has purchased the Silver plan, they see a button labeled βGo to the course.β
They also see three additional course images with buttons labeled βGet access.β
These allow them to upgrade:
a. from Silver to Gold,
b. from Silver to Platinum,
c. from Silver to Diamond.
Now, letβs see what happens when a customer makes an upgrade.
Suppose the customer chooses option a and upgrades from Silver to Gold.
On the βMy Accountβ page, theyβll now see access to both the Basic and Advanced courses, along with two new upgrade options:
a. from Gold to Platinum,
b. from Gold to Diamond.
Everything here is pretty straightforward.
Based on the defined conditions, specific buttons and images will appear dynamically on the βMy Accountβ page.
This approach automates the process of purchasing new product variants directly online.
Below is a modified by me snippet I found online. You can paste it into Fluent Snippets:
/**
Β * Shortcode: [fluentcrm_condition]
Β *
- Extended version with support for exclude_tags and exclude_lists.
Β *
Β * example:
Β * [fluentcrm_condition tags="rjo-os" exclude_tags="rjo-oz,rjo-os-do-oz" exclude_lists="newsletter,archiwum"]
Β *Β Β Only visible if user has rjo-os but no rjo-oz, rjo-os-do-oz or newsletter/archive lists.
Β * [/fluentcrm_condition]
Β */
Β
function fluentcrm_condition_shortcode($atts, $content = null)
{
Β Β Β if (!function_exists('FluentCrmApi')) {
Β Β Β Β Β Β Β return '';
Β Β Β }
Β
Β Β Β $atts = shortcode_atts([
Β Β Β Β Β Β Β 'tags' => '',
Β Β Β Β Β Β Β 'exclude_tags' => '',
Β Β Β Β Β Β Β 'lists' => '',
Β Β Β Β Β Β Β 'exclude_lists' => '',
Β Β Β Β Β Β Β 'custom_fields' => '',
Β Β Β Β Β Β Β 'relation' => 'any',
Β Β Β Β Β Β Β 'has' => 'yes',
Β Β Β ], $atts);
Β
Β Β Β $contactApi = FluentCrmApi('contacts');
Β
Β Β Β try {
Β Β Β Β Β Β Β $contact = $contactApi->getCurrentContact(true, true);
Β Β Β } catch (Throwable $e) {
Β Β Β Β Β Β Β return '';
Β Β Β }
Β
Β Β Β if (!$contact) {
Β Β Β Β Β Β Β return '';
Β Β Β }
Β
Β Β Β // --- Parsowanie atrybutΓ³w ---
Β Β Β $tags = array_filter(array_map('trim', explode(',', $atts['tags'])));
Β Β Β $exclude_tags = array_filter(array_map('trim', explode(',', $atts['exclude_tags'])));
Β Β Β $lists = array_filter(array_map('trim', explode(',', $atts['lists'])));
Β Β Β $exclude_lists = array_filter(array_map('trim', explode(',', $atts['exclude_lists'])));
Β Β Β $relation = strtolower($atts['relation']) === 'all' ? 'all' : 'any';
Β Β Β $has = strtolower($atts['has']) !== 'no';
Β
Β Β Β // --- Pobierz tagi kontaktu ---
Β Β Β $tagSlugs = [];
Β Β Β if (method_exists($contact, 'tags')) {
Β Β Β Β Β Β Β try {
Β Β Β Β Β Β Β Β Β Β Β $tagSlugs = $contact->tags()->pluck('slug')->toArray();
Β Β Β Β Β Β Β } catch (Throwable $e) {
Β Β Β Β Β Β Β Β Β Β Β $tagSlugs = [];
Β Β Β Β Β Β Β }
Β Β Β }
Β
Β Β Β if (empty($tagSlugs) && property_exists($contact, 'tags')) {
Β Β Β Β Β Β Β foreach ($contact->tags as $t) {
Β Β Β Β Β Β Β Β Β Β Β if (is_object($t) && isset($t->slug)) {
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β $tagSlugs[] = $t->slug;
Β Β Β Β Β Β Β Β Β Β Β } elseif (is_array($t) && isset($t['slug'])) {
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β $tagSlugs[] = $t['slug'];
Β Β Β Β Β Β Β Β Β Β Β }
Β Β Β Β Β Β Β }
Β Β Β }
Β
Β Β Β $tagSlugs = array_map('strtolower', $tagSlugs);
Β
Β Β Β // --- Pobierz listy kontaktu ---
Β Β Β $listSlugs = [];
Β Β Β if (method_exists($contact, 'lists')) {
Β Β Β Β Β Β Β try {
Β Β Β Β Β Β Β Β Β Β Β $listSlugs = $contact->lists()->pluck('slug')->toArray();
Β Β Β Β Β Β Β } catch (Throwable $e) {
Β Β Β Β Β Β Β Β Β Β Β $listSlugs = [];
Β Β Β Β Β Β Β }
Β Β Β }
Β
Β Β Β if (empty($listSlugs) && property_exists($contact, 'lists')) {
Β Β Β Β Β Β Β foreach ($contact->lists as $l) {
Β Β Β Β Β Β Β Β Β Β Β if (is_object($l) && isset($l->slug)) {
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β $listSlugs[] = $l->slug;
Β Β Β Β Β Β Β Β Β Β Β } elseif (is_array($l) && isset($l['slug'])) {
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β $listSlugs[] = $l['slug'];
Β Β Β Β Β Β Β Β Β Β Β }
Β Β Β Β Β Β Β }
Β Β Β }
Β
Β Β Β $listSlugs = array_map('strtolower', $listSlugs);
Β
Β Β Β // --- SprawdΕΊ tagi ---
Β Β Β $has_tags = true;
Β Β Β if (!empty($tags)) {
Β Β Β Β Β Β Β $matches = array_intersect(array_map('strtolower', $tags), $tagSlugs);
Β Β Β Β Β Β Β if ($relation === 'all') {
Β Β Β Β Β Β Β Β Β Β Β $has_tags = (count($matches) === count($tags));
Β Β Β Β Β Β Β } else {
Β Β Β Β Β Β Β Β Β Β Β $has_tags = !empty($matches);
Β Β Β Β Β Β Β }
Β Β Β Β Β Β Β if (!$has) {
Β Β Β Β Β Β Β Β Β Β Β $has_tags = !$has_tags;
Β Β Β Β Β Β Β }
Β Β Β }
Β
Β Β Β // --- SprawdΕΊ wykluczone tagi ---
Β Β Β $has_excluded_tags = false;
Β Β Β if (!empty($exclude_tags)) {
Β Β Β Β Β Β Β foreach ($exclude_tags as $ex) {
Β Β Β Β Β Β Β Β Β Β Β if (in_array(strtolower($ex), $tagSlugs, true)) {
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β $has_excluded_tags = true;
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β break;
Β Β Β Β Β Β Β Β Β Β Β }
Β Β Β Β Β Β Β }
Β Β Β }
Β
Β Β Β // --- SprawdΕΊ listy ---
Β Β Β $has_lists = true;
Β Β Β if (!empty($lists)) {
Β Β Β Β Β Β Β $matches = array_intersect(array_map('strtolower', $lists), $listSlugs);
Β Β Β Β Β Β Β if ($relation === 'all') {
Β Β Β Β Β Β Β Β Β Β Β $has_lists = (count($matches) === count($lists));
Β Β Β Β Β Β Β } else {
Β Β Β Β Β Β Β Β Β Β Β $has_lists = !empty($matches);
Β Β Β Β Β Β Β }
Β Β Β Β Β Β Β if (!$has) {
Β Β Β Β Β Β Β Β Β Β Β $has_lists = !$has_lists;
Β Β Β Β Β Β Β }
Β Β Β }
Β
Β Β Β // --- SprawdΕΊ wykluczone listy ---
Β Β Β $has_excluded_lists = false;
Β Β Β if (!empty($exclude_lists)) {
Β Β Β Β Β Β Β foreach ($exclude_lists as $ex) {
Β Β Β Β Β Β Β Β Β Β Β if (in_array(strtolower($ex), $listSlugs, true)) {
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β $has_excluded_lists = true;
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β break;
Β Β Β Β Β Β Β Β Β Β Β }
Β Β Β Β Β Β Β }
Β Β Β }
Β
Β Β Β // --- Logika koΕcowa ---
Β Β Β // Warunek: ma wymagane tagi i listy, ale nie ma ΕΌadnych wykluczonych.
Β Β Β if ($has_tags && $has_lists && !$has_excluded_tags && !$has_excluded_lists) {
Β Β Β Β Β Β Β return do_shortcode($content);
Β Β Β }
Β
Β Β Β return '';
}
Β
add_shortcode('fluentcrm_condition', 'fluentcrm_condition_shortcode');
Β
Is it possible or do you plan to send automated FluentCart reports with FluentCRM? Monthly revenue etc. Would be useful.
I'm providing a monthly service to my web management clients and one of the thing that I like to implement is sending similar analytics report (how many visitors, how many sales, the top traffic sources etc). I used to do this with MainWP and some custom code, but I have thought about recreating this in FluentCRM :)
I've added [fluentcrm_pref] to a page, but when I view it on the front end, it doesn't load anything.
I enabled "Enable Preference Form Shortcode" in the FluentCRM settings.
I plan to buy FluentCRM. Which affiliates have good bonuses if you buy through them? Thanks!
Can I use a single site license on a domain and its subdomains like this: theartofapplying.com, app.theartofapplying.com, flow.theartofapplying.com?
For example, a user opts into my mailing list on my marketing website (Site A) but then becomes a paying member of Fluent Community on my Shop website (Site B).
Can I pay for one FluentCRM single-site license to have FCRM on my site and its subdomains?
Is there a way to dynamically display a custom field's value to a logged-in contact?
Context: I use a FCRM custom field to track how many remaining service tasks a client has. These tasks reset each month, and I'd like to display the remaining tasks to the client when they login.
Ideally, I'd LOVE to do this in a Fluent Cart profile section if possible.
I saw there is an Oxygen Integration....do we also get a Breakdance Integration?
In automations, could you add a new conditional action to select which automation should or should not be active? Just like there is a condition for included tags.
I need this because I have 2 similar automations and I want to avoid them running at the same time for single person. So I want to check if they already have an active automation and if yes, the second automation stops.
Also, is it possible for people to opt-out of email automations? In the bottom of the email, they can click "Manage preferences" and from there, they can remove from lists, but not automations. So currently they can't stop the automation (sales letters for a specific product for example).
Thanks!
This is something I pestered Kit to do for years, and to my knowledge they never did: allow us to organize tags into groups or folders to make them easier to manage. It wouldn't have to have any bearing on how tags actually work; simply a user experience improvement on the back end.
Hello Fluent CRM team,
I would like to suggest a feature that could greatly enhance content personalization and user management.
Currently, it is not possible to control access to specific WordPress pages based on the tags assigned to a user in Fluent CRM.
Ideally, Fluent CRM could allow:
β’ Restricting or allowing access to certain pages depending on user tags
β’ Showing or hiding content dynamically based on user tags
β’ Creating personalized experiences for users without additional plugins
This would help marketers, course creators, and community managers provide tailored content to users, improving engagement and relevance.
I sincerely thank you for considering this suggestion, it could make Fluent CRM even more powerful for personalized marketing and content management.
