Skip to main content

Has anyone set up a waitlist for locked Fluent Community spaces using FluentCRM Pro, without using a form?

My users are already logged in, so I'd like a "Join Waitlist" button to:

  • Apply the appropriate FluentCRM waitlist tag.
  • Display a confirmation message ("You've been added to the waitlist...")
  • Send the user a confirmation email.
  • Notify me that someone joined the waitlist.

I've already created the waitlist tags for each community. Is this possible with FluentCRM/Fluent Community alone, or does it require custom code? Any guidance would be appreciated!

I'm going live with Jeffrey Dalrymple on his channel to talk about something a lot of you have been raising here lately: what AI actually means for WordPress, and for the tools you build your business on.

Some of you started a really thoughtful discussion recently about the role of plugins in a world where AI can build almost anything. This is a chance to go deeper on that, live. I'll share where I think it's all heading, how we're using AI inside our own team and products, and why I believe AI plus a well-built plugin beats AI alone.

And since it's live, bring your questions. Some of the best moments in these chats come straight from the audience.

Here's the link: https://www.youtube.com/live/5dIo27b_Gv8

Hope to see you there.

Hi everyone,

I'm looking for some advice on enforcing strong password policies in FluentCommunity.

I'm using FluentCommunity Pro together with FluentAuth, and my users register through the native FluentCommunity signup form.

I'd like to require strong passwords for all new users, for example:

  • Minimum 12 characters
  • At least one uppercase letter
  • At least one lowercase letter
  • At least one number
  • At least one special character

I couldn't find any built-in setting for password policies in either FluentCommunity or FluentAuth.

Has anyone implemented this successfully?

  • Is there a built-in option that I missed?
  • Is there an official hook or filter to validate password strength during registration?
  • Or are you using a custom solution?

I'd love to hear how others are handling this.

Thanks!

Hi everyone,

Quick question for the community:

Has anyone successfully enabled Two-Factor Authentication (2FA) for all users while using the FluentCommunity login page?

I'm using FluentCommunity Pro 2.7.5 together with FluentAuth, but users logging in through the FluentCommunity authentication page are not prompted for a second authentication step.

If you've managed to get 2FA working, could you share how you configured it?

Thanks in advance!

Hi FCommunity!

Is there a way to render the "@Community Account Username" using a SmartCode or a similar method?

I'd like to include a direct link to each member's profile in the welcome email. Since the profile URL contains the username, I need a way to dynamically insert the @Community Account Username into the link.

.../members/u/<@Community Account Username>/update

Is this possible? Any ideas?

Thank you in advance!

As I work more with Fluent Community, the more I want to implement methods to increase engagement and spotlight the top contributors.

One method I would love to see implemented is the ability to monitor the top contributors (last 7 days in my example) and have FCRM trigger an automation.

For example, the automation would be able to:

  1. Recognise the top 3 (non Admin) contributors
  2. Have a shortcode in FCRM to display the names of the top 3
  3. FCRM automation to create a new post (using a user editable template) to highlight the top contributors (using the shortcode in point 2 in the template).
  4. Post this at a defined timescale (every Friday for example).

There are so many potential automation triggers that could be implemented for Fluent Community in FCRM to handle all manner of engagement techniques, that I'd love to see implemented. :)

I have submitted my final request for a full refund of FluentCommunity, FluentCart, FluentAffiliate, FluentBookings and FluentPlayer.

This follows a longer history than an ordinary refund request. Fluent previously refunded my FluentCommunity VIP purchase outside the standard refund period. I later chose to trust the company again and purchased FluentCommunity another time. I was told that my VIP status would be restored, but it was not.

Since then, I have invested substantial time investigating and solving problems across the ecosystem. Based on that work, I have lost confidence in the products’ current completeness, interoperability, transparency and long-term direction.

I am not requesting additional support, account credit, complimentary access or VIP reinstatement. I do not want to keep the products, even if they are offered free. I have asked Fluent to consider the complete history of this customer relationship and refund every purchase associated with my account.

However, this does not mean I am abandoning the developers and businesses already using Fluent products.

I still intend to build independent plugins and integrations for Fluent users, including:

  • WooCommerce integration for FluentCommunity
  • FluentCart integration for FluentCommunity
  • SureCart integration for FluentCommunity
  • A FluentCart and InstaWP WaaS system
  • Tools that make FluentCommunity behave like a genuinely smooth and complete SPA
  • Improved guest landing and logged-in feed experiences
  • Consistent SPA navigation without unnecessary reloads
  • Better mobile navigation and menu behavior
  • Configurable login and registration routes
  • Correct browser titles and SPA head management
  • Better performance and caching behavior
  • Improved responsive layouts and sidebar controls
  • More useful community dashboards and member statistics
  • Better public-page and SEO behavior
  • Additional controls that administrators currently lack

These will be independent products created for people who need FluentCommunity and related Fluent products to work more smoothly and cohesively. Continuing this development should not be interpreted as an endorsement of Fluent or as evidence that my concerns have been resolved. It means I believe existing users deserve better solutions, and I believe the work already invested can still produce something valuable for them.

My refund request and my independent development plans are separate matters. I hope Fluent responds transparently, acknowledges the complete history and resolves the refund professionally.

If it does not, I will consider the consumer remedies available to me with independent legal advice. I also remain free to publish honest, evidence-based reviews describing the products, communications and support experience accurately.

New functions that can improve ranking engagement and leaderboard itself

  • Time spent online (1d, 1m, total)
  • Most comments (1d, 1m, total)
  • Most posts (1d, 1m, total)

Now leaderboard shows only users who recieved most reactions in three periods.

The code are in french but it will allow youself to see before the chang, MAKE A BACKUP UP FIRST but it work really well,

<?php
/**

  • PAGE TEMPORAIRE DE CORRECTION DES IDENTIFIANTS WORDPRESS
  • =========================================================
  • INSTALLATION :
    1. Fais une SAUVEGARDE de ta base de donnΓ©es avant toute chose
  • (cPanel > phpMyAdmin > Exporter, ou l'outil de sauvegarde de ton hΓ©bergeur).
    1. Uploade ce fichier Γ  la RACINE de ton site WordPress
  • (le mΓͺme dossier que wp-load.php, wp-config.php, etc.)
  • Par exemple via le File Manager de cPanel.
    1. Connecte-toi Γ  wp-admin dans ton navigateur (obligatoire, ce script
  • vΓ©rifie que tu es bien administrateur).
    1. Va sur : https://reseauunderground.com/fix-usernames-admin.php
    1. Clique d'abord sur "Simulation" pour voir les changements prΓ©vus,
  • SANS rien modifier.
    1. Si le rΓ©sultat te convient, clique sur "Appliquer".
    1. ⚠️ SUPPRIME CE FICHIER du serveur une fois terminΓ© β€” il ne doit
  • JAMAIS rester en ligne, car il pourrait Γͺtre visible par n'importe qui
  • qui viserait Γ  accΓ©der au dashboard administrateur.
    */

require_once DIR . '/wp-load.php';

// SΓ©curitΓ© : uniquement pour les administrateurs connectΓ©s
if ( ! current_user_can( 'manage_options' ) ) {
wp_die( 'Accès refusé. Connecte-toi en tant qu\'administrateur sur wp-admin, puis recharge cette page.' );
}

$action = isset( $_POST['action'] ) ? sanitize_text_field( $_POST['action'] ) : '';
$dry_run = ( $action !== 'apply' );
$ran = ( $action === 'simulate' || $action === 'apply' );

$results = [];

if ( $ran ) {
$users = get_users( [
'search' => '@',
'search_columns' => [ 'user_login' ],
'number' => -1,
] );

foreach ( $users as $user ) {
    $old_login    = $user->user_login;
    $display_name = trim( $user->display_name );

    if ( empty( $display_name ) ) {
        $results[] = [ 'status' => 'ignore', 'msg' => "ID {$user->ID} β€” pas de nom affichΓ©, impossible de gΓ©nΓ©rer un identifiant ({$old_login})" ];
        continue;
    }

    // Nettoie les accents, dΓ©coupe en mots, met une majuscule au dΓ©but
    // de chaque mot, puis assemble sans sΓ©parateur (ex: "Abdoulaye Gassama Diaby" -> "AbdoulayeGassamaDiaby")
    $clean = remove_accents( $display_name );
    $clean = preg_replace( '/[^a-zA-Z0-9\s]+/', ' ', $clean ); // enlève tout sauf lettres/chiffres/espaces
    $words = preg_split( '/\s+/', trim( $clean ) );
    $words = array_filter( $words ); // enlève les entrées vides
    $words = array_map( function( $w ) {
        return ucfirst( strtolower( $w ) );
    }, $words );

    // Retire les mots dupliquΓ©s consΓ©cutifs (ex: "Jez Jez Muertadel Muertadel" -> "Jez Muertadel")
    $deduped = [];
    foreach ( $words as $w ) {
        if ( empty( $deduped ) || strtolower( end( $deduped ) ) !== strtolower( $w ) ) {
            $deduped[] = $w;
        }
    }

    $base = implode( ' ', $deduped );

    if ( empty( $base ) ) {
        $results[] = [ 'status' => 'ignore', 'msg' => "ID {$user->ID} — nom illisible après nettoyage ({$old_login})" ];
        continue;
    }

    $new_login = $base;
    $i = 1;
    while ( username_exists( $new_login ) && $new_login !== $old_login ) {
        $i++;
        $new_login = $base . $i;
    }

    if ( $new_login === $old_login ) {
        $results[] = [ 'status' => 'ok', 'msg' => "ID {$user->ID} β€” dΓ©jΓ  correct ({$old_login})" ];
        continue;
    }

    if ( $dry_run ) {
        $results[] = [ 'status' => 'change', 'msg' => "ID {$user->ID} : {$old_login} β†’ {$new_login}" ];
    } else {
        global $wpdb;
        $wpdb->update(
            $wpdb->users,
            [ 'user_login' => $new_login ],
            [ 'ID' => $user->ID ]
        );
        clean_user_cache( $user->ID );
        $results[] = [ 'status' => 'applied', 'msg' => "ID {$user->ID} : {$old_login} β†’ {$new_login} βœ… appliquΓ©" ];
    }
}

}

?>

<!DOCTYPE html>

Correction des identifiants WordPress body { font-family: -apple-system, Arial, sans-serif; max-width: 900px; margin: 40px auto; padding: 0 20px; background: #f5f5f5; } h1 { font-size: 20px; } .box { background: white; padding: 20px; border-radius: 8px; margin-bottom: 20px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); } .warning { background: #fff3cd; border: 1px solid #ffc107; padding: 15px; border-radius: 6px; margin-bottom: 20px; } button { padding: 10px 20px; border: none; border-radius: 6px; cursor: pointer; font-size: 14px; margin-right: 10px; } .btn-simulate { background: #2271b1; color: white; } .btn-apply { background: #d63638; color: white; } table { width: 100%; border-collapse: collapse; margin-top: 15px; } td { padding: 6px 8px; border-bottom: 1px solid #eee; font-size: 13px; font-family: monospace; } .change { color: #b26a00; } .applied { color: #0a7d1f; font-weight: bold; } .ignore { color: #999; } .ok { color: #999; } .count { font-weight: bold; }

πŸ”§ Correction en masse des identifiants WordPress

⚠️ N'oublie pas de supprimer ce fichier du serveur une fois la correction terminée.

Ce script cherche tous les utilisateurs dont l'identifiant (user_login) contient un "@" et propose de le remplacer par un identifiant propre basΓ© sur leur nom affichΓ©.

<form method="post" style="display:inline;">
    <input type="hidden" name="action" value="simulate">
    <button type="submit" class="btn-simulate">1. Lancer la simulation (aucune modification)</button>
</form>

<form method="post" style="display:inline;" onsubmit="return confirm('Confirmes-tu vouloir APPLIQUER les changements ? Cette action modifie rΓ©ellement la base de donnΓ©es.');">
    <input type="hidden" name="action" value="apply">
    <button type="submit" class="btn-apply">2. Appliquer les changements (dΓ©finitif)</button>
</form>

<?php if ( $ran ) : ?>

utilisateur(s) analysΓ©(s).

<td class="">

Hi everyone,

I’m planning to use FluentCommunity on a Persian (Farsi) WordPress site, so I need RTL support and ideally a Persian translation for the plugin UI.

Thank you