{"id":176086,"date":"2023-09-30T08:32:06","date_gmt":"2023-09-30T08:32:06","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/fluent-comments\/"},"modified":"2026-08-31T04:43:57","modified_gmt":"2026-08-31T04:43:57","slug":"fluent-comments","status":"publish","type":"plugin","link":"https:\/\/haz.wordpress.org\/plugins\/fluent-comments\/","author":10403484,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.1.0","stable_tag":"2.1.0","tested":"7.1","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"FluentComments","header_author":"WPManageNinja Team","header_description":"Simple Comments Plugin for WordPress to fight with spams and trolls","assets_banners_color":"ffffff","last_updated":"2026-08-31 04:43:57","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/WPManageNinja\/fluent-comments","header_author_uri":"https:\/\/wpmanageninja.com","rating":4.3,"author_block_rating":0,"active_installs":700,"downloads":6201,"num_ratings":6,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"techjewel","date":"2023-10-01 09:06:47","revision":2973445},"1.0.1":{"tag":"1.0.1","author":"techjewel","date":"2024-05-18 13:32:11","revision":3088683},"2.0.0":{"tag":"2.0.0","author":"techjewel","date":"2025-07-06 15:51:11","revision":3323061},"2.1.0":{"tag":"2.1.0","author":"techjewel","date":"2026-08-31 04:43:57","revision":3673374}},"upgrade_notice":{"2.1.0":"<p>All five comment notification emails can now be edited and previewed on one screen, there is a block for FSE themes, spam protection is much stronger, and comments are now readable by search engines. Two things to know: a name and email address are now always required from commenters who are not logged in, whatever your WordPress Discussion setting says; and if another anti-spam or CAPTCHA plugin adds a field to your comment form, its check no longer runs.<\/p>"},"ratings":{"1":1,"2":0,"3":0,"4":0,"5":5},"assets_icons":{"icon.svg":{"filename":"icon.svg","revision":2973271,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3673374,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3673374,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"fluent-comments\/comments":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"fluent-comments\/comments","version":"2.1.0","title":"FluentComments","category":"theme","icon":"admin-comments","description":"Display comments and comment form with AJAX loading and spam protection.","keywords":["comments","discussion","fluent"],"textdomain":"fluent-comments","usesContext":["postId"],"supports":{"html":false,"align":["wide","full"],"spacing":{"margin":true,"padding":true}},"attributes":{"titleWithComments":{"type":"string","default":""},"titleNoComments":{"type":"string","default":""},"showTitle":{"type":"boolean","default":true},"showAvatars":{"type":"boolean","default":true},"primaryColor":{"type":"string","default":""},"textColor":{"type":"string","default":""},"cardBackgroundColor":{"type":"string","default":""},"borderRadius":{"type":"number","default":4}},"editorScript":"file:..\/..\/dist\/block\/editor.jsx.js","editorStyle":"file:..\/..\/dist\/block\/editor.jsx.css","style":"file:..\/..\/dist\/css\/app.css"}},"tagged_versions":["1.0.0","1.0.1","2.0.0","2.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3673374,"resolution":"1","location":"assets","locale":"","width":2560,"height":1440},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3673374,"resolution":"2","location":"assets","locale":"","width":2560,"height":1440},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3673374,"resolution":"3","location":"assets","locale":"","width":2560,"height":1440},"screenshot-4.jpg":{"filename":"screenshot-4.jpg","revision":3673374,"resolution":"4","location":"assets","locale":"","width":2560,"height":1440},"screenshot-5.jpg":{"filename":"screenshot-5.jpg","revision":3673374,"resolution":"5","location":"assets","locale":"","width":2560,"height":1440},"screenshot-6.jpg":{"filename":"screenshot-6.jpg","revision":3673374,"resolution":"6","location":"assets","locale":"","width":2560,"height":1440},"screenshot-7.jpg":{"filename":"screenshot-7.jpg","revision":3673374,"resolution":"7","location":"assets","locale":"","width":2560,"height":1440},"screenshot-8.jpg":{"filename":"screenshot-8.jpg","revision":3673374,"resolution":"8","location":"assets","locale":"","width":2560,"height":1440}},"screenshots":{"1":"Comments load and post without reloading the page, with threaded replies and an inline reply form","2":"The settings screen: which post types FluentComments runs on, and the rules every comment is held to","3":"Every notification email in one place, each one switched on or off from the row","4":"Write your own subject and body in the WordPress editor, with placeholders for the comment, post and recipient","5":"Every email previewed against a real comment from your own site before it goes out","6":"One template design - logo, colors, footer and From address - shared by every email","7":"The approval notice as the commenter receives it","8":"The whole screen in dark mode, remembered per browser"}},"plugin_section":[],"plugin_tags":[5829,109,16575,107,2419],"plugin_category":[44],"plugin_contributors":[145000,157383],"plugin_business_model":[],"class_list":["post-176086","plugin","type-plugin","status-publish","hentry","plugin_tags-ajax-comments","plugin_tags-antispam","plugin_tags-comment-notification","plugin_tags-comments","plugin_tags-spam-protection","plugin_category-discussion-and-community","plugin_contributors-techjewel","plugin_contributors-wpmanageninja","plugin_committers-techjewel"],"banners":{"banner":"https:\/\/ps.w.org\/fluent-comments\/assets\/banner-772x250.png?rev=3673374","banner_2x":"https:\/\/ps.w.org\/fluent-comments\/assets\/banner-1544x500.png?rev=3673374","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/fluent-comments\/assets\/icon.svg?rev=2973271","icon":"https:\/\/ps.w.org\/fluent-comments\/assets\/icon.svg?rev=2973271","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/fluent-comments\/assets\/screenshot-1.jpg?rev=3673374","caption":"Comments load and post without reloading the page, with threaded replies and an inline reply form"},{"src":"https:\/\/ps.w.org\/fluent-comments\/assets\/screenshot-2.jpg?rev=3673374","caption":"The settings screen: which post types FluentComments runs on, and the rules every comment is held to"},{"src":"https:\/\/ps.w.org\/fluent-comments\/assets\/screenshot-3.jpg?rev=3673374","caption":"Every notification email in one place, each one switched on or off from the row"},{"src":"https:\/\/ps.w.org\/fluent-comments\/assets\/screenshot-4.jpg?rev=3673374","caption":"Write your own subject and body in the WordPress editor, with placeholders for the comment, post and recipient"},{"src":"https:\/\/ps.w.org\/fluent-comments\/assets\/screenshot-5.jpg?rev=3673374","caption":"Every email previewed against a real comment from your own site before it goes out"},{"src":"https:\/\/ps.w.org\/fluent-comments\/assets\/screenshot-6.jpg?rev=3673374","caption":"One template design - logo, colors, footer and From address - shared by every email"},{"src":"https:\/\/ps.w.org\/fluent-comments\/assets\/screenshot-7.jpg?rev=3673374","caption":"The approval notice as the commenter receives it"},{"src":"https:\/\/ps.w.org\/fluent-comments\/assets\/screenshot-8.jpg?rev=3673374","caption":"The whole screen in dark mode, remembered per browser"}],"raw_content":"<!--section=description-->\n<p><strong>FluentComments replaces the WordPress comment form with a fast, modern, AJAX powered one, and it stops comment spam before it ever reaches your moderation queue.<\/strong><\/p>\n\n<p>Comments post without a page reload. Replies thread properly. Spam is blocked by several layers working together, so your readers never have to solve a CAPTCHA. And every email your site sends because somebody commented, whether that email goes to the commenter, the post author or you, can be rewritten in your own words with your own logo and colors.<\/p>\n\n<p>FluentComments works on classic themes, block (FSE) themes and page builders. Every feature is free. <strong>There is no pro version, no upsell and no paid add-on.<\/strong> The whole plugin is open source on <a href=\"https:\/\/github.com\/WPManageNinja\/fluent-comments\/\">GitHub<\/a>.<\/p>\n\n<h4>FluentComments at a glance<\/h4>\n\n<ul>\n<li><strong>AJAX comments.<\/strong> Post a comment or a reply with no page reload.<\/li>\n<li><strong>Comment spam protection.<\/strong> Signed tokens, a honeypot, a timing check and rate limits, with no CAPTCHA for your readers.<\/li>\n<li><strong>Threaded replies<\/strong> that follow your WordPress discussion depth.<\/li>\n<li><strong>\"Load more\" pagination<\/strong> instead of 400 comments in one request.<\/li>\n<li><strong>Five comment notification emails.<\/strong> Each one can be edited, previewed and switched off.<\/li>\n<li><strong>An email template designer.<\/strong> Your logo, your colors, your footer and your From address, shared by all five.<\/li>\n<li><strong>Block (FSE) theme support<\/strong> with a real block, plus a <code>[fluent_comments]<\/code> shortcode for page builders.<\/li>\n<li><strong>Cache friendly.<\/strong> There is no security nonce anywhere in the plugin, so a cached comment form never expires.<\/li>\n<li><strong>Light, dark and system<\/strong> appearance for the admin screen.<\/li>\n<li><strong>Developer friendly.<\/strong> A small, documented set of actions and filters.<\/li>\n<li><strong>100% free and open source<\/strong>, GPLv2.<\/li>\n<\/ul>\n\n<h4>Why FluentComments<\/h4>\n\n<p>WordPress comments are a genuinely good feature buried under a form from 2010 and a spam problem that most people solve by turning comments off. FluentComments fixes both halves: how comments look and feel, and the flood of junk behind them.<\/p>\n\n<h4>\u26a1 Instant, AJAX powered commenting<\/h4>\n\n<ul>\n<li>Post a comment or a reply <strong>without reloading the page<\/strong><\/li>\n<li>Threaded replies that follow your WordPress discussion depth setting<\/li>\n<li><strong>\"Load more\"<\/strong> pagination instead of dumping 400 comments into one request<\/li>\n<li>Gravatar avatars, relative timestamps and a clean, modern card layout<\/li>\n<li>Fully responsive, and styled with CSS custom properties so your theme can restyle every part of it<\/li>\n<li>The whole interface is translatable<\/li>\n<\/ul>\n\n<h4>\ud83d\udee1\ufe0f Comment spam protection, without a CAPTCHA<\/h4>\n\n<p>Spam is scored, not guessed at. A borderline comment is <strong>held for moderation<\/strong>, and only a conclusive failure is turned away. Nobody is asked to identify a traffic light.<\/p>\n\n<ul>\n<li><strong>Signed submission tokens.<\/strong> Every comment needs a short lived, HMAC signed token that is issued in a separate request. A bot that posts blindly at your site never gets one.<\/li>\n<li><strong>Single use tokens, bound to a session cookie.<\/strong> A token cannot be replayed, or lifted from another visitor's page.<\/li>\n<li><strong>A honeypot field<\/strong> whose name comes from your site's own salt. It is different on every install, so it cannot be hard coded against.<\/li>\n<li><strong>A timing check.<\/strong> A form submitted faster than a human could type is scored as suspicious.<\/li>\n<li><strong>Rate limiting<\/strong>, keyed per session first and per IP only as a backstop. An office or a CDN exit address is never counted as one person.<\/li>\n<li><strong>Native form rejection.<\/strong> Once FluentComments handles a post type, anything posted to the default WordPress endpoint without our fields is refused. Bots that skip your page and POST straight to <code>wp-comments-post.php<\/code> get nothing.<\/li>\n<li>Every threshold can be adjusted with a filter, and Akismet keeps working alongside it.<\/li>\n<\/ul>\n\n<h4>\u2709\ufe0f Five comment notification emails, all yours to rewrite<\/h4>\n\n<p>FluentComments owns every notification your site sends about a comment, and puts them all on one screen:<\/p>\n\n<ol>\n<li><strong>A held comment was approved.<\/strong> Sent by FluentComments to the commenter.<\/li>\n<li><strong>Someone replied in their thread.<\/strong> Sent to everyone above the reply.<\/li>\n<li><strong>A comment landed on their post.<\/strong> Sent to the post author.<\/li>\n<li><strong>A comment was posted.<\/strong> WordPress's own notice, rewritten.<\/li>\n<li><strong>A comment is waiting for review.<\/strong> WordPress's own moderation notice, rewritten.<\/li>\n<\/ol>\n\n<ul>\n<li>Switch each one on or off from its own row. The switch takes effect immediately, with no save button.<\/li>\n<li>Edit the subject and body in a real WordPress editor. Smartcodes like <code>{{comment.author}}<\/code>, <code>{{post.title}}<\/code>, <code>{{receiver.name}}<\/code> and <code>{{comment.content}}<\/code> are filled in when the mail goes out.<\/li>\n<li><strong>Preview an email against a real comment from your site<\/strong> before you send anything.<\/li>\n<li>A shared <strong>template designer<\/strong> for your logo, your colors, your footer text, and the From and Reply-To addresses.<\/li>\n<li>WordPress's own two notices are left completely alone until you explicitly ask to replace them. Upgrading the plugin never quietly changes an email your site was already sending.<\/li>\n<\/ul>\n\n<h4>\ud83e\udde9 Block themes, classic themes, page builders<\/h4>\n\n<ul>\n<li>A <strong>FluentComments block<\/strong> for the Site Editor, with its own title, avatar, color and border radius controls<\/li>\n<li>A <code>[fluent_comments]<\/code> shortcode that works anywhere, including page builders<\/li>\n<li>On a classic theme it takes over <code>comments_template<\/code> automatically, so there is nothing to place<\/li>\n<li>On a block theme the plugin <strong>never rewrites your templates for you<\/strong>. Instead, the settings screen works out which template each of your post types renders through, follows its template parts and patterns, and tells you exactly which post types still need the block placed<\/li>\n<\/ul>\n\n<h4>\u2699\ufe0f Settings that don't fight WordPress<\/h4>\n\n<p>The settings screen puts the WordPress Discussion options that actually matter next to the plugin's own: the moderation word lists, the link limit, threading depth, who may comment, and closing comments on old posts.<\/p>\n\n<p>They are read and written <strong>in place<\/strong> as real WordPress options, never copied. This screen and Settings \u203a Discussion can never disagree with each other.<\/p>\n\n<h4>\ud83d\ude80 Built for cached sites<\/h4>\n\n<p>Assume every page on your site is served from a full page cache to somebody else. FluentComments does.<\/p>\n\n<ul>\n<li><strong>Nothing visitor specific is ever printed into the HTML.<\/strong> No identity, no token, and no security nonce anywhere in the plugin, so a comment form served from cache can never fail with a stale security token.<\/li>\n<li>The first page of comments is <strong>rendered into the page itself<\/strong>, so a visitor who only reads never triggers an uncached request.<\/li>\n<li>Everything per visitor is fetched <strong>on intent<\/strong>, when someone actually goes to comment.<\/li>\n<\/ul>\n\n<h4>\ud83e\uddd1\u200d\ud83d\udcbb For developers<\/h4>\n\n<p>A small, documented extension API that works identically on both front ends:<\/p>\n\n<ul>\n<li><code>fluent_comments\/form_fields<\/code>: render your own fields into the form<\/li>\n<li><code>fluent_comments\/validate_submission<\/code>: reject a submission with a <code>WP_Error<\/code><\/li>\n<li><code>fluent_comments\/comment_data<\/code>: adjust the comment before it reaches WordPress<\/li>\n<li><code>fluent_comments\/spam_score<\/code>: nudge the score up or down<\/li>\n<li><code>fluent_comments\/before_process<\/code> and <code>fluent_comments\/after_added_comment<\/code>: act around the insert<\/li>\n<\/ul>\n\n<p>Every comment goes through <code>wp_handle_comment_submission()<\/code>, the same function <code>wp-comments-post.php<\/code> uses, so core's validation, moderation rules and <code>comment_post<\/code> hook all behave exactly as they always did.<\/p>\n\n<h4>100% free, forever<\/h4>\n\n<p>No pro version. No locked features. No \"upgrade to unlock\". Every feature described on this page is in the plugin you are about to install, and the source is on <a href=\"https:\/\/github.com\/WPManageNinja\/fluent-comments\/\">GitHub<\/a> under GPLv2.<\/p>\n\n<h4>Contribute on GitHub<\/h4>\n\n<p>FluentComments is fully open source. If you want to contribute, or just report a bug, you are very welcome. The repository is on <a href=\"https:\/\/github.com\/WPManageNinja\/fluent-comments\/\">GitHub<\/a>.<\/p>\n\n<h4>Other plugins by the WPManageNinja team<\/h4>\n\n<ul>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/fluent-cart\/\">FluentCart - Simple and Powerful eCommerce Plugin for WordPress<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/fluentform\/\">Fluent Forms - Fastest Contact Form Builder Plugin for WordPress<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/fluent-smtp\/\">FluentSMTP - The Most Advanced SMTP, SES Plugin for WordPress<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/fluent-crm\/\">FluentCRM - Email Marketing Automation and CRM Plugin for WordPress<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/ninja-tables\/\">Ninja Tables - Best WP DataTables Plugin for WordPress<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install FluentComments from the WordPress.org plugin directory, or upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate FluentComments from the Plugins page.<\/li>\n<li>Go to <strong>Comments \u203a FluentComments<\/strong> and pick the post types it should handle. That is the whole setup.<\/li>\n<\/ol>\n\n<p><strong>If your theme is a block (FSE) theme<\/strong>, there is one extra step. Open the Site Editor, edit the template your posts render through, replace the <strong>Comments<\/strong> block with the <strong>FluentComments<\/strong> block, and save. Or drop the <code>[fluent_comments]<\/code> shortcode wherever you want comments. The settings screen checks this for you and tells you which post types still need it.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20fluentcomments%20really%20free%3F%20is%20there%20a%20pro%20version%3F\"><h3>Is FluentComments really free? Is there a pro version?<\/h3><\/dt>\n<dd><p>It is free, and there is no pro version. Every feature listed on this page is in the free plugin: the spam protection, all five emails, the template designer and the block. Nothing is held back, and the whole thing is GPLv2 open source on GitHub.<\/p><\/dd>\n<dt id=\"how%20does%20fluentcomments%20stop%20comment%20spam%20without%20a%20captcha%3F\"><h3>How does FluentComments stop comment spam without a CAPTCHA?<\/h3><\/dt>\n<dd><p>By making the submission itself expensive to fake. Posting a comment requires a short lived, cryptographically signed token that is issued in a separate request and tied to a session cookie, so it cannot be replayed or reused. On top of that there is a honeypot field with an install specific name, a minimum time between opening the form and submitting it, and rate limiting keyed per session with a per IP backstop. Anything posted straight to the default WordPress endpoint without our fields is refused outright. Suspicious submissions are scored and held for moderation rather than thrown away, and every threshold can be changed with a filter.<\/p><\/dd>\n<dt id=\"do%20i%20still%20need%20recaptcha%20or%20a%20captcha%20plugin%3F\"><h3>Do I still need reCAPTCHA or a CAPTCHA plugin?<\/h3><\/dt>\n<dd><p>No. FluentComments is built so your readers never have to prove they are human. The checks happen between the browser and your server, not in front of the person trying to leave a comment.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20akismet%3F\"><h3>Does it work with Akismet?<\/h3><\/dt>\n<dd><p>Yes. Akismet inspects the comment itself and needs nothing from the form, so it runs normally alongside FluentComments.<\/p><\/dd>\n<dt id=\"what%20if%20i%20use%20another%20anti-spam%20or%20captcha%20plugin%20on%20my%20comment%20form%3F\"><h3>What if I use another anti-spam or CAPTCHA plugin on my comment form?<\/h3><\/dt>\n<dd><p>FluentComments renders its own comment form, so a field another plugin wants to add, like a CAPTCHA or an extra question, is never printed on the page. Because nobody could fill that field in, running its validator anyway would reject every comment on your site. So those validators are skipped for the duration of a FluentComments submission. If you want to keep another plugin's check, add its callback to the <code>fluent_comments\/allowed_comment_hooks<\/code> filter and render its field with the <code>fluent_comments\/form_fields<\/code> action.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20block%20%28fse%29%20themes%3F\"><h3>Does it work with block (FSE) themes?<\/h3><\/dt>\n<dd><p>Yes. Add the <strong>FluentComments<\/strong> block in the Site Editor, or use the <code>[fluent_comments]<\/code> shortcode. The plugin never edits your templates on your behalf. But the settings screen does work out which template each post type renders through, looks inside it and its template parts, and tells you which ones still need the block.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20elementor%2C%20divi%2C%20bricks%20and%20other%20page%20builders%3F\"><h3>Does it work with Elementor, Divi, Bricks and other page builders?<\/h3><\/dt>\n<dd><p>Yes. Drop the <code>[fluent_comments]<\/code> shortcode into any builder's shortcode or text widget and the full comment list and form render there.<\/p><\/dd>\n<dt id=\"will%20it%20work%20with%20my%20caching%20plugin%3F\"><h3>Will it work with my caching plugin?<\/h3><\/dt>\n<dd><p>Yes, and it is designed for it. Nothing visitor specific is printed into the page, so a cached comment form is still a valid one. There is no security nonce anywhere in the plugin, which means a form served from cache can never fail with the \"your session has expired\" error that nonce based forms hit. Everything per visitor is fetched on demand, only when someone actually goes to comment.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20site%3F\"><h3>Will it slow down my site?<\/h3><\/dt>\n<dd><p>No. The first page of comments is rendered into the page itself, so a visitor who only reads never triggers an extra request. There is no webfont, no external service and no third party script. Comments load in pages rather than all at once.<\/p><\/dd>\n<dt id=\"can%20i%20keep%20my%20existing%20comments%3F\"><h3>Can I keep my existing comments?<\/h3><\/dt>\n<dd><p>Yes. FluentComments uses the normal WordPress comments table and the normal WordPress comment functions. Nothing is migrated, copied or moved. These are your existing comments, displayed and protected better. Deactivate the plugin and your comments are still exactly where they were.<\/p><\/dd>\n<dt id=\"can%20i%20restyle%20the%20comments%20to%20match%20my%20theme%3F\"><h3>Can I restyle the comments to match my theme?<\/h3><\/dt>\n<dd><p>Yes. Every color, spacing value and radius is a CSS custom property, so a handful of <code>--fcom-*<\/code> overrides in your theme will restyle the whole thing. The block also exposes its title, avatars, colors and border radius in the editor sidebar.<\/p><\/dd>\n<dt id=\"does%20it%20respect%20my%20wordpress%20discussion%20settings%3F\"><h3>Does it respect my WordPress Discussion settings?<\/h3><\/dt>\n<dd><p>Yes, with one exception. Threading depth, moderation keywords, disallowed keywords, the link limit, \"comment author must have a previously approved comment\", \"users must be registered and logged in\": all of them are real WordPress options that FluentComments reads and writes in place. The most useful ones are surfaced on the FluentComments screen so you do not have to go hunting for them.<\/p>\n\n<p>The exception is \"Comment author must fill out name and email\", which FluentComments always applies to its own form whatever that box is set to. See the question below for why.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20comment%20notification%20emails%3F\"><h3>Can I customize the comment notification emails?<\/h3><\/dt>\n<dd><p>Yes, all five of them. Rewrite the subject and body of any email, use smartcodes like <code>{{comment.author}}<\/code> and <code>{{post.title}}<\/code>, preview it against a real comment from your site, and set a shared logo, color scheme, footer and From\/Reply-To address for all of them. WordPress's own two notices are left untouched unless you explicitly choose to replace them.<\/p><\/dd>\n<dt id=\"can%20i%20add%20my%20own%20fields%20to%20the%20comment%20form%3F\"><h3>Can I add my own fields to the comment form?<\/h3><\/dt>\n<dd><p>Yes. Use the <code>fluent_comments\/form_fields<\/code> action to render them and <code>fluent_comments\/validate_submission<\/code> to check them. They work identically on the block, the shortcode and the classic template. Because fields ship with the per request session payload rather than the cached page, anything time sensitive in them stays fresh.<\/p><\/dd>\n<dt id=\"do%20commenters%20have%20to%20give%20a%20name%20and%20email%20address%3F\"><h3>Do commenters have to give a name and email address?<\/h3><\/dt>\n<dd><p>Yes, unless they are logged in. FluentComments always asks a logged out commenter for both, and it does not follow the WordPress \"Comment author must fill out name and email\" setting, which is why that option is not on our settings screen. The reason is the notification emails: every one of them is addressed by the commenter's email, so an anonymous comment quietly opts its author out of the reply notifications everybody else in the thread receives, and leaves you nothing to moderate on. Logged in commenters are never asked, because WordPress already has both from their account. The WordPress setting itself is untouched and still applies to any post type FluentComments is not handling.<\/p><\/dd>\n<dt id=\"my%20site%20is%20behind%20cloudflare%20or%20a%20load%20balancer.%20do%20i%20need%20to%20do%20anything%3F\"><h3>My site is behind Cloudflare or a load balancer. Do I need to do anything?<\/h3><\/dt>\n<dd><p>Usually not. Most managed hosts, and the Cloudflare plugin, put the visitor's real address into <code>REMOTE_ADDR<\/code> for you, and FluentComments reads it from there.<\/p>\n\n<p>If yours does not, every visitor looks like the same address. The limit that matters follows a per visitor cookie rather than the IP, so nobody gets locked out, but the loose per IP ceiling then applies to the whole site at once. You can opt into reading proxy headers:<\/p>\n\n<pre><code>add_filter('fluent_comments\/trust_proxy_headers', '__return_true');\n<\/code><\/pre>\n\n<p>Only do that when your origin server cannot be reached directly, bypassing the proxy. This setting trusts the header rather than verifying the proxy sent it, so on a directly reachable origin a visitor could set the header themselves and sidestep the per IP limit. It is also worth narrowing <code>fluent_comments\/proxy_ip_headers<\/code> to the one header your proxy actually sets.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.1.0 (Date: Aug 31, 2026)<\/h4>\n\n<ul>\n<li>New: an Emails screen. All five comment notification emails can be edited, previewed against a real comment, and switched on or off from one place.<\/li>\n<li>New: a shared email template designer for your logo, colors, footer text and From address.<\/li>\n<li>New: a FluentComments block for block (FSE) themes. The settings screen tells you which post types still need it.<\/li>\n<li>New: comments load in pages with a \"Load more\" button instead of all at once.<\/li>\n<li>New: the most useful WordPress Discussion settings now sit on the FluentComments screen.<\/li>\n<li>New: a rebuilt admin screen with light, dark and system appearance modes.<\/li>\n<li>Improved: much stronger spam protection, and a suspicious comment is now held for moderation instead of being turned away.<\/li>\n<li>Improved: comments are now written into the page itself instead of being fetched by JavaScript after it loads, so search engines and link previews can read them.<\/li>\n<li>Improved: the whole front end is translatable. Previously it was hard coded English.<\/li>\n<li>Changed: a name and email address are now always required from commenters who are not logged in, whatever the WordPress \"Comment author must fill out name and email\" setting says. That setting has been removed from the FluentComments screen; it still applies to any post type FluentComments is not handling. Every notification email is addressed by the commenter's email, so an anonymous comment quietly opts its author out of the replies everyone else in the thread receives.<\/li>\n<li>Fixed: comments that WordPress or Akismet marked as spam or trash could still trigger notification emails containing their contents.<\/li>\n<li>Fixed: re-approving a comment sent its notifications a second time.<\/li>\n<li>Fixed: pingbacks and trackbacks were emailed as if somebody had left a comment.<\/li>\n<li>Fixed: comments could be submitted on post types FluentComments was not switched on for.<\/li>\n<li>Fixed: on a cached site, the comment form could be served to the wrong visitor - showing a logged in reader the login notice, or leaving an anonymous one without the name and email fields.<\/li>\n<li>Fixed: comment times were saved in server time instead of UTC.<\/li>\n<li>Fixed: post authors got two emails for the same comment.<\/li>\n<li>Fixed: the comment form showed on posts with comments closed.<\/li>\n<li>Fixed: reply depth ignored your WordPress discussion settings.<\/li>\n<li>Fixed: the block's \"Show Avatars\" option had no effect.<\/li>\n<li>Fixed: pingbacks and trackbacks appeared in the comment list.<\/li>\n<li>Please note: if you use another anti-spam or CAPTCHA plugin on your comment form, its check no longer runs on the FluentComments form. Akismet is not affected and keeps working.<\/li>\n<\/ul>\n\n<h4>2.0.0 (Date: Jul 07, 2025)<\/h4>\n\n<ul>\n<li>Added support for FSE themes<\/li>\n<li>Added email notifications for admins, authors and commenters<\/li>\n<li>Added an option to enable or disable email notifications<\/li>\n<li>Advanced spam protection with cryptographic tokens<\/li>\n<\/ul>\n\n<h4>1.0.1 (Date: May 18, 2024)<\/h4>\n\n<ul>\n<li>Added shortcode support for FSE themes<\/li>\n<li>Fixed minor CSS issues<\/li>\n<li>Checking logged in requirement for the comment form<\/li>\n<\/ul>\n\n<h4>1.0.0 (Date: Sep 30, 2023)<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"AJAX comments with layered spam protection and no CAPTCHA. Threaded replies, load more, and 5 editable notification emails. Free, no pro version.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/haz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/176086","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/haz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/haz.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/haz.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=176086"}],"author":[{"embeddable":true,"href":"https:\/\/haz.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/techjewel"}],"wp:attachment":[{"href":"https:\/\/haz.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=176086"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/haz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=176086"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/haz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=176086"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/haz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=176086"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/haz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=176086"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/haz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=176086"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}