Skip to content
View as Markdown

Frontend Filters

FluentCRM Core Intermediate

These filter hooks let you customize FluentCRM's frontend pages — unsubscribe forms, double optin behavior, subscription management, and bounce handling.

Unsubscribe Page

fluent_crm/will_auto_unsubscribe

Control whether FluentCRM auto-unsubscribes in one click without showing the reason form. Default behavior asks for a reason.

Parameters

  • $status String - 'yes' or 'no', Default 'no'

Usage:

php
add_filter('fluent_crm/will_auto_unsubscribe', function($status) {
    return 'yes'; // One-click unsubscribe, no form
});

Source: app/Hooks/Handlers/ExternalPages.php


fluent_crm/unsubscribe_texts

Filter the labels and texts displayed on the unsubscribe page form.

Parameters

  • $texts Array - Form labels
  • $subscriber Subscriber Model - Contact who is unsubscribing
php
$texts = [
    'heading'             => __('Unsubscribe', 'fluent-crm'),
    'heading_description' => __('We\'re sorry to see you go!', 'fluent-crm'),
    'email_label'         => __('Your Email Address', 'fluent-crm'),
    'reason_label'        => __('Please let us know a reason', 'fluent-crm'),
    'button_text'         => __('Unsubscribe', 'fluent-crm')
];

Usage:

php
add_filter('fluent_crm/unsubscribe_texts', function($texts, $subscriber) {
    $texts['button_text'] = 'Unsubscribe (No email updates)';
    return $texts;
}, 10, 2);

Source: app/Hooks/Handlers/ExternalPages.php


fluent_crm/unsubscribe_reasons

Filter the reasons shown in the unsubscribe reason dropdown.

Parameters

  • $reasons Array - Associative array of reason_key => label

Usage:

php
add_filter('fluent_crm/unsubscribe_reasons', function($reasons) {
    $reasons['custom_reason'] = __('Other reason', 'fluent-crm');
    return $reasons;
}, 20);

Source: app/Hooks/Handlers/ExternalPages.php


fluent_crm/unsub_response_message

Filter the response message shown after a contact successfully unsubscribes.

Parameters

Usage:

php
add_filter('fluent_crm/unsub_response_message', function($message, $subscriber) {
    return 'You have been unsubscribed. No further emails will be sent.';
}, 10, 2);

Source: app/Hooks/Handlers/ExternalPages.php


fluent_crm/unsub_redirect_url

Filter the redirect URL after a contact unsubscribes. Return a URL to redirect instead of showing a message.

Parameters

Usage:

php
add_filter('fluent_crm/unsub_redirect_url', function($redirectUrl, $subscriber) {
    return 'https://example.com/goodbye';
}, 10, 2);

Source: app/Hooks/Handlers/ExternalPages.php


Double Optin

fluent_crm/double_optin_options

Filter the double optin confirmation configuration — redirect URL, message, or behavior after a contact confirms.

Parameters

php
$config = [
    'after_confirmation_type' => 'redirect', // or 'message'
    'after_confirm_message'   => 'MESSAGE_DEFINED_IN_SETTINGS',
    'after_conf_redirect_url' => 'URL_DEFINED_IN_SETTINGS',
];

Usage:

php
add_filter('fluent_crm/double_optin_options', function($config, $subscriber) {
    $config['after_confirmation_type'] = 'redirect';
    $config['after_conf_redirect_url'] = 'https://example.com/welcome';
    return $config;
}, 10, 2);

Source: app/Hooks/Handlers/ExternalPages.php


fluent_crm/double_optin_email_subject

Filter the double optin confirmation email subject line.

Parameters

Usage:

php
add_filter('fluent_crm/double_optin_email_subject', function($subject, $subscriber) {
    return 'Please confirm your subscription, ' . $subscriber->first_name;
}, 10, 2);

Source: app/Services/Libs/Mailer/Handler.php


fluent_crm/double_optin_email_body

Filter the double optin confirmation email body HTML. Smart codes have already been parsed by fluent_crm/parse_campaign_email_text when this runs.

WARNING

This fires before the #activate_link# placeholder is swapped for the real confirmation URL. Keep that token in whatever you return, or the contact gets an email with no way to confirm.

Parameters

  • $body String - Email body HTML, still containing the #activate_link# placeholder
  • $subscriber Subscriber Model

Usage:

php
add_filter('fluent_crm/double_optin_email_body', function($body, $subscriber) {
    // Keep #activate_link# intact — it becomes the confirmation URL
    return $body . '<p>Questions? Just reply to this email.</p>';
}, 10, 2);

Source: app/Services/Libs/Mailer/Handler.php


fluent_crm/double_optin_email_pre_header

Filter the double optin confirmation email pre-header text.

Parameters

  • $preHeader String - Pre-header text; an empty string when no pre-header is configured
  • $subscriber Subscriber Model

Usage:

php
add_filter('fluent_crm/double_optin_email_pre_header', function($preHeader, $subscriber) {
    return 'Confirm your email to start receiving updates';
}, 10, 2);

Source: app/Services/Libs/Mailer/Handler.php


Manage Subscription Page

fluent_crm/pref_labels

Filter the field labels on the Manage Subscription page.

Parameters

  • $labels Array - Field labels
php
$labels = [
    'first_name'      => __('First Name', 'fluent-crm'),
    'last_name'       => __('Last Name', 'fluent-crm'),
    'prefix'          => __('Title', 'fluent-crm'),
    'email'           => __('Email', 'fluent-crm'),
    'phone'           => __('Phone/Mobile', 'fluent-crm'),
    'dob'             => __('Date of Birth', 'fluent-crm'),
    'address_line_1'  => __('Address Line 1', 'fluent-crm'),
    'address_line_2'  => __('Address Line 2', 'fluent-crm'),
    'city'            => __('City', 'fluent-crm'),
    'state'           => __('State', 'fluent-crm'),
    'postal_code'     => __('ZIP Code', 'fluent-crm'),
    'country'         => __('Country', 'fluent-crm'),
    'update'          => __('Update info', 'fluent-crm'),
    'address_heading' => __('Address Information', 'fluent-crm'),
    'list_label'      => __('Mailing List Groups', 'fluent-crm'),
    'custom_fields'   => __('Custom Fields', 'fluent-crm'),
];

Usage:

php
add_filter('fluent_crm/pref_labels', function($labels) {
    $labels['update'] = 'Update My Profile';
    return $labels;
});

Source: app/Hooks/Handlers/PrefFormHandler.php


fluent_crm/pref_form_fields

Filter the fields rendered on the Manage Subscription form.

Parameters

Usage:

php
add_filter('fluent_crm/pref_form_fields', function($formFields, $subscriber) {
    // Add, remove, or reorder form fields
    return $formFields;
}, 10, 2);

Source: app/Hooks/Handlers/PrefFormHandler.php


fluent_crm/show_unsubscribe_on_pref

Control whether an unsubscribe button is shown on the Manage Subscription page. Default is hidden.

Parameters

  • $show Boolean - Default false

Usage:

php
add_filter('fluent_crm/show_unsubscribe_on_pref', function($show) {
    return true; // Show unsubscribe button on manage subscription page
});

Source: app/Views/external/manage_subscription_form.php


Newsletter Archive

Pro

fluent_crm/newsletter_archive_template

Replace the newsletter archive list template file with a custom one.

Parameters

  • $templateFile String - path to the template file

Usage:

php
add_filter('fluent_crm/newsletter_archive_template', function($templateFile) {
    return plugin_dir_path(__FILE__) . 'templates/my-archive.php';
});

Source: fluentcampaign-pro/app/Hooks/Handlers/CampaignArchiveFront.php


fluent_crm/newsletter_single_template

Replace the single newsletter display template file with a custom one.

Parameters

  • $templateFile String - path to the template file

Usage:

php
add_filter('fluent_crm/newsletter_single_template', function($templateFile) {
    return plugin_dir_path(__FILE__) . 'templates/my-newsletter.php';
});

Source: fluentcampaign-pro/app/Hooks/Handlers/CampaignArchiveFront.php


Customize the base URL for newsletter archive links.

Parameters

  • $basePermalink String - default uses get_the_permalink()

Usage:

php
add_filter('fluent_crm/newsletter_single_permalink_base', function($basePermalink) {
    return home_url('/newsletters/');
});

Source: fluentcampaign-pro/app/Hooks/Handlers/CampaignArchiveFront.php


fluent_crm/newsletter_list_title_single

Filter individual newsletter titles in the archive list view.

Parameters

  • $subject String - newsletter subject/title
  • $campaign Campaign Model

Usage:

php
add_filter('fluent_crm/newsletter_list_title_single', function($subject, $campaign) {
    return '[Newsletter] ' . $subject;
}, 10, 2);

Source: fluentcampaign-pro/app/Hooks/Handlers/CampaignArchiveFront.php


fluent_crm/newsletter_preview_data

Filter newsletter data before rendering the single newsletter view.

Parameters

  • $newsletter Array - newsletter display data
  • $campaign Campaign Model

Usage:

php
add_filter('fluent_crm/newsletter_preview_data', function($newsletter, $campaign) {
    // Modify newsletter before rendering
    return $newsletter;
}, 10, 2);

Source: fluentcampaign-pro/app/Hooks/Handlers/CampaignArchiveFront.php


fluent_crm/disable_newsletter_archive_css

Disable the default CSS styling on newsletter archive pages.

Parameters

  • $shouldDisable Boolean - Default false

Usage:

php
add_filter('fluent_crm/disable_newsletter_archive_css', function($shouldDisable) {
    return true; // Use your own styles
});

Source: fluentcampaign-pro/app/Views/single_newsletter.php, fluentcampaign-pro/app/Views/all_newsletters.php


Pro

fluent_crm/will_make_auto_login

Control whether a contact is automatically logged in to WordPress when accessing a smart link.

Parameters

  • $willMakeLogin Boolean - default is based on whether fluent_crm/smart_link_verified has fired
  • $contact Subscriber Model

Usage:

php
add_filter('fluent_crm/will_make_auto_login', function($willMakeLogin, $contact) {
    // Disable auto-login for certain contacts
    if ($contact->status !== 'subscribed') {
        return false;
    }
    return $willMakeLogin;
}, 10, 2);

Source: fluentcampaign-pro/app/Hooks/Handlers/SmartLinkHandler.php


fluent_crm/enable_high_level_auto_login

Control whether a user who holds the publish_posts capability — authors, editors and administrators — can be auto-logged in via a smart link. Disabled by default for security.

This is only reached after fluent_crm/will_make_auto_login has already allowed the login, so it acts as a second gate specifically for privileged accounts.

Parameters

  • $shouldEnable Boolean - Default false
  • $contact Subscriber Model - the contact behind the smart link

Usage:

php
add_filter('fluent_crm/enable_high_level_auto_login', function($shouldEnable, $contact) {
    return false; // Keep disabled for safety
}, 10, 2);

Source: fluentcampaign-pro/app/Hooks/Handlers/SmartLinkHandler.php


Bounce Handling

fluent_crm/bounced_email_store

Control whether a bounce report for an address that is not yet a contact creates one. Return false to ignore bounces for unknown addresses. Bounces for existing contacts are always applied and never consult this filter.

Parameters

  • $store Boolean - Default true

Usage:

php
add_filter('fluent_crm/bounced_email_store', function($store) {
    return false; // Don't create contacts from bounced emails
});

Source: app/Hooks/Handlers/ExternalPages.php


fluent_crm/soft_bounce_limit

Filter the number of soft bounces a contact may accumulate before being marked bounced. The running count is stored in the _soft_bounce_count contact meta; once it reaches the limit, the next soft bounce flips the contact's status.

Parameters

  • $limit INT - Default 5

Usage:

php
add_filter('fluent_crm/soft_bounce_limit', function($limit) {
    return 10; // Allow more soft bounces before marking as bounced
});

Source: app/Hooks/Handlers/ExternalPages.php


fluent_crm/bounce_handlers

Filter the array of bounce handler configurations (e.g., Amazon SES, Mailgun, SendGrid bounce endpoints).

Parameters

  • $handlers Array - Handler config keyed by service name
  • $securityCode String - Webhook security code

Usage:

php
add_filter('fluent_crm/bounce_handlers', function($handlers, $securityCode) {
    $handlers['my_esp'] = [
        'title' => 'My ESP',
        'url'   => site_url('?fluentcrm=1&route=bounce_handler&provider=my_esp&verify_key=' . $securityCode)
    ];
    return $handlers;
}, 10, 2);

Source: app/Http/Controllers/SettingsController.php