{"id":335591,"date":"2026-07-12T17:00:47","date_gmt":"2026-07-12T17:00:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/smart-ai-comment-moderator\/"},"modified":"2026-07-12T17:00:12","modified_gmt":"2026-07-12T17:00:12","slug":"prepublish-comment-moderator","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/prepublish-comment-moderator\/","author":20490193,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.5.4","stable_tag":"1.5.4","tested":"7.0.1","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"PrePublish Comment Moderator","header_author":"koskar22","header_description":"Pre-publish AI comment moderation \u2014 block spam and toxic comments before they go live. OpenAI, Gemini, Groq, Perspective, or free local filter. Greek & English.","assets_banners_color":"","last_updated":"2026-07-12 17:00:12","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/prepublish-comment-moderator\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":28,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.5.4":{"tag":"1.5.4","author":"koskar22","date":"2026-07-12 17:00:12"}},"upgrade_notice":{"1.5.3":"<p>WordPress.org review: text domain aligned with slug, removed error_reporting in production bootstrap.<\/p>","1.5.2":""},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.5.4"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Settings page \u2014 AI provider selection, thresholds, and API key field.","2":"Built-in API setup guide with step-by-step instructions for each provider.","3":"Live Comments banner and AI Protected badge on the frontend.","4":"AI Score column in the WordPress Comments admin list.","5":"AI Verified badge on approved comments."}},"plugin_section":[],"plugin_tags":[2353,107,1756,261548,599],"plugin_category":[44,54],"plugin_contributors":[257671],"plugin_business_model":[],"class_list":["post-335591","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-comments","plugin_tags-moderation","plugin_tags-prepublish","plugin_tags-spam","plugin_category-discussion-and-community","plugin_category-security-and-spam-protection","plugin_contributors-koskar22","plugin_committers-koskar22"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/prepublish-comment-moderator.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>PrePublish Comment Moderator<\/strong> protects your WordPress site by analyzing every new comment <em>before<\/em> it is published. Each comment receives a toxicity\/spam score from <strong>0 to 100<\/strong>, and the plugin automatically approves, holds, or marks it as spam based on thresholds you control.<\/p>\n\n<p>No more drowning in spam. No more toxic comments slipping through. Set it up in minutes and let AI (or a free offline filter) do the heavy lifting.<\/p>\n\n<h4>Why use this plugin?<\/h4>\n\n<ul>\n<li><strong>Real-time moderation<\/strong> \u2014 comments are checked on submission, before they appear on your site.<\/li>\n<li><strong>Multiple AI providers<\/strong> \u2014 choose the engine that fits your budget and needs.<\/li>\n<li><strong>Free option included<\/strong> \u2014 start with the built-in Local Filter; no API key required.<\/li>\n<li><strong>Multilingual<\/strong> \u2014 optimized for <strong>Greek<\/strong>, <strong>English<\/strong>, and <strong>Greeklish<\/strong> (including accent and leetspeak bypass detection).<\/li>\n<li><strong>Comment Schema (SEO)<\/strong> \u2014 enriches Yoast SEO, Rank Math, All in One SEO, SEOPress, and Newsroom OS graphs with <code>Comment<\/code> markup (no duplicates).<\/li>\n<li><strong>Fail-safe design<\/strong> \u2014 if an API fails or times out, comments are held for manual review instead of being published blindly.<\/li>\n<li><strong>Admin-friendly<\/strong> \u2014 clear settings page, step-by-step API key guides, AI Score column, and one-click Retry AI button.<\/li>\n<li><strong>Frontend polish<\/strong> \u2014 optional Live Comments banner and AI Verified badge.<\/li>\n<\/ul>\n\n<h4>AI providers<\/h4>\n\n\n\n\n  Provider\n  API key\n  Cost\n  Best for\n\n\n\n\n  <strong>Local Filter<\/strong>\n  Not required\n  100% free, unlimited\n  Fast offline blocking, Greek\/English word lists, custom blocked words\n\n\n  <strong>Groq<\/strong>\n  Yes (free tier)\n  Generous free daily limits\n  Smart AI moderation at no cost\n\n\n  <strong>OpenAI (ChatGPT)<\/strong>\n  Yes\n  Pay-as-you-go (~$0.0001\/comment)\n  Highest accuracy, context &amp; sarcasm\n\n\n  <strong>Google Gemini<\/strong>\n  Yes\n  Free tier (~20\/day) or paid billing\n  Strong multilingual AI\n\n\n  <strong>Perspective API<\/strong>\n  Yes (approval)\n  Free with Google approval\n  Dedicated toxicity scoring\n\n\n\n\n<p>The settings screen includes <strong>built-in setup instructions<\/strong> for every provider, with direct links to API consoles.<\/p>\n\n<h4>How moderation works<\/h4>\n\n<ol>\n<li>A visitor submits a comment on your site.<\/li>\n<li>The plugin sends the comment text to your chosen provider (or runs the local filter on your server).<\/li>\n<li>A score from 0 (safe) to 100 (toxic\/spam) is returned.<\/li>\n<li>Based on your thresholds:\n\n<ul>\n<li><strong>0 \u2013 Approve threshold<\/strong> \u2192 comment is published (with optional \u201cAI Verified\u201d badge).<\/li>\n<li><strong>Above approve, up to Hold threshold<\/strong> \u2192 comment is held for moderation.<\/li>\n<li><strong>Above Hold threshold<\/strong> \u2192 comment is marked as spam.<\/li>\n<\/ul><\/li>\n<li>If the API errors or times out, the comment is <strong>held<\/strong> \u2014 never silently approved. Failed checks are retried automatically in the background, or manually via <strong>Retry AI<\/strong> in the admin.<\/li>\n<\/ol>\n\n<h4>Key features<\/h4>\n\n<ul>\n<li>Adjustable strictness with two thresholds (approve \/ hold \/ spam zones).<\/li>\n<li>Encrypted API key storage on your server.<\/li>\n<li>Email notification when a comment is held (optional).<\/li>\n<li>Custom blocked words list for the Local Filter with severity levels.<\/li>\n<li>Quality Score and auto Top Comment pinning for engagement.<\/li>\n<li>Comment Schema.org markup merged into existing SEO plugin JSON-LD.<\/li>\n<li>Greek UI translations when your site locale is Greek.<\/li>\n<\/ul>\n\n<h4>Privacy<\/h4>\n\n<p>When you use an <strong>AI provider<\/strong> (OpenAI, Gemini, Groq, or Perspective), comment text is sent to that provider\u2019s API for analysis. The <strong>Local Filter<\/strong> runs entirely on your server and does not send data externally.<\/p>\n\n<p>You are responsible for complying with your provider\u2019s terms of service and your site\u2019s privacy policy. API keys are stored encrypted using WordPress salts.<\/p>\n\n<p>See the <strong>External services<\/strong> section below for details on each third-party service.<\/p>\n\n<h4>Who is this for?<\/h4>\n\n<ul>\n<li>News sites and blogs with active comment sections.<\/li>\n<li>Greek and international publishers who need bilingual moderation.<\/li>\n<li>Site owners tired of manual spam cleanup.<\/li>\n<li>Anyone who wants AI-powered comment safety without coding.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to third-party AI services <strong>only when you select a cloud provider<\/strong> and enter an API key. The Local Filter runs entirely on your server and does not contact external services.<\/p>\n\n<p>For each provider below: <strong>what<\/strong> it is, <strong>what data<\/strong> is sent, <strong>when<\/strong>, and links to <strong>terms<\/strong> and <strong>privacy policy<\/strong>.<\/p>\n\n<h4>Groq<\/h4>\n\n<p>Used for AI-powered toxicity\/spam scoring when you select Groq as the provider.<\/p>\n\n<p><strong>Data sent:<\/strong> The plain text of each new comment submitted on the frontend, plus a short moderation prompt (no visitor IP or email is sent by this plugin).\n<strong>When:<\/strong> Only at comment submission time, and only when Groq is the active provider.\n<strong>Service:<\/strong> Groq, Inc. \u2014 <a href=\"https:\/\/groq.com\/terms-of-use\/\">Terms of Use<\/a>, <a href=\"https:\/\/groq.com\/privacy-policy\/\">Privacy Policy<\/a>.<\/p>\n\n<h4>OpenAI<\/h4>\n\n<p>Used for AI-powered toxicity\/spam scoring when you select OpenAI as the provider.<\/p>\n\n<p><strong>Data sent:<\/strong> The plain text of each new comment submitted on the frontend, plus a short moderation prompt.\n<strong>When:<\/strong> Only at comment submission time, and only when OpenAI is the active provider.\n<strong>Service:<\/strong> OpenAI \u2014 <a href=\"https:\/\/openai.com\/policies\/terms-of-use\">Terms of Use<\/a>, <a href=\"https:\/\/openai.com\/policies\/privacy-policy\">Privacy Policy<\/a>.<\/p>\n\n<h4>Google Gemini<\/h4>\n\n<p>Used for AI-powered toxicity\/spam scoring when you select Google Gemini as the provider.<\/p>\n\n<p><strong>Data sent:<\/strong> The plain text of each new comment submitted on the frontend, plus a short moderation prompt. Your API key is sent as part of the request URL to Google\u2019s API endpoint.\n<strong>When:<\/strong> Only at comment submission time, and only when Gemini is the active provider.\n<strong>Service:<\/strong> Google \u2014 <a href=\"https:\/\/ai.google.dev\/gemini-api\/terms\">Gemini API Terms<\/a>, <a href=\"https:\/\/policies.google.com\/privacy\">Privacy Policy<\/a>.<\/p>\n\n<h4>Google Perspective API<\/h4>\n\n<p>Used for dedicated toxicity scoring when you select Perspective API as the provider.<\/p>\n\n<p><strong>Data sent:<\/strong> The plain text of each new comment submitted on the frontend.\n<strong>When:<\/strong> Only at comment submission time, and only when Perspective is the active provider.\n<strong>Service:<\/strong> Google Jigsaw \/ Perspective API \u2014 governed by <a href=\"https:\/\/developers.google.com\/terms\">Google APIs Terms of Service<\/a> and <a href=\"https:\/\/policies.google.com\/privacy\">Google Privacy Policy<\/a>. See also the <a href=\"https:\/\/developers.perspectiveapi.com\/s\/about-the-api-faqs\">Perspective API FAQ<\/a>.<\/p>\n\n<!--section=installation-->\n<h4>Automatic installation<\/h4>\n\n<ol>\n<li>In your WordPress admin, go to <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Search for <strong>PrePublish Comment Moderator<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<h4>Manual installation<\/h4>\n\n<ol>\n<li>Upload the <code>prepublish-comment-moderator<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Go to <strong>Settings \u2192 PrePublish Moderator<\/strong>.<\/li>\n<\/ol>\n\n<h4>Quick start (recommended)<\/h4>\n\n<ol>\n<li>Open <strong>Settings \u2192 PrePublish Moderator<\/strong>.<\/li>\n<li>Select <strong>Local Filter (Free \u2014 no API key)<\/strong> as your AI provider.<\/li>\n<li>Set your strictness thresholds (defaults: approve \u2264 30, hold \u2264 70, above 70 = spam).<\/li>\n<li>Click <strong>Save Changes<\/strong>.<\/li>\n<li>Submit a test comment on any post with comments enabled.<\/li>\n<\/ol>\n\n<p>You can switch to Groq, OpenAI, Gemini, or Perspective at any time by selecting a provider and pasting your API key. Follow the on-screen setup guide for each service.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20api%20key%3F\"><h3>Do I need an API key?<\/h3><\/dt>\n<dd><p>No. The <strong>Local Filter<\/strong> works without any API key and is enabled by default. For smarter detection (context, sarcasm, nuanced toxicity), use Groq (free tier) or OpenAI.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20greek%20comments%3F\"><h3>Does it work with Greek comments?<\/h3><\/dt>\n<dd><p>Yes. The plugin is built for <strong>Greek<\/strong>, <strong>English<\/strong>, and <strong>Greeklish<\/strong>. The Local Filter includes 300+ terms with accent normalization and common bypass patterns. AI providers (OpenAI, Groq, Gemini) also handle Greek well when configured.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20the%20api%20fails%3F\"><h3>What happens if the API fails?<\/h3><\/dt>\n<dd><p>The comment is placed <strong>on hold<\/strong> for manual review. It will not be auto-approved. The plugin retries automatically in the background (~2.5 minutes, up to 3 times), or you can click <strong>Retry AI<\/strong> in the Comments admin list.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20site%3F\"><h3>Will this slow down my site?<\/h3><\/dt>\n<dd><p>Comment analysis runs only when someone submits a comment \u2014 not on every page view. API calls use a 15-second timeout. The Local Filter runs instantly on your server.<\/p><\/dd>\n<dt id=\"does%20it%20moderate%20logged-in%20users%3F\"><h3>Does it moderate logged-in users?<\/h3><\/dt>\n<dd><p>Yes. All frontend comment submissions are moderated, including from registered users (except in wp-admin).<\/p><\/dd>\n<dt id=\"where%20are%20api%20keys%20stored%3F\"><h3>Where are API keys stored?<\/h3><\/dt>\n<dd><p>API keys are encrypted with OpenSSL using WordPress authentication salts before being saved in your database.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.5.4<\/h4>\n\n<ul>\n<li>Stronger spam detection: URLs, SEO\/marketing pitches, and promotional comments scored via heuristics (merged with AI score).<\/li>\n<li>AI prompt updated to flag polite link spam and consulting outreach as high-score spam.<\/li>\n<\/ul>\n\n<h4>1.5.3<\/h4>\n\n<ul>\n<li>Text domain set to prepublish-comment-moderator (matches WordPress.org slug).<\/li>\n<li>Removed ini_set\/error_reporting from bootstrap (review feedback).<\/li>\n<li>Main plugin file: prepublish-comment-moderator.php.<\/li>\n<\/ul>\n\n<h4>1.5.2<\/h4>\n\n<ul>\n<li>Updated Tested up to: 7.0.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Fixed JSON-LD output: all schema paths encode with JSON_HEX_TAG (and related flags) so comment text cannot break out of script tags.<\/li>\n<li>Text domain aligned with WordPress.org slug (prepublish-comment-moderator).<\/li>\n<li>Updated Tested up to: 6.9.<\/li>\n<li>Fixed Perspective API legal links (Google APIs Terms of Service).<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Renamed to PrePublish Comment Moderator (SEO-friendly, distinctive slug: prepublish-comment-moderator).<\/li>\n<li>Removed custom CSS textarea (use theme Customizer for styling instead).<\/li>\n<li>Error log moved to uploads directory (not inside plugin folder).<\/li>\n<li>Removed load_plugin_textdomain() \u2014 WordPress.org handles translations automatically.<\/li>\n<li>Added External services section to readme with ToS\/privacy links for all AI providers.<\/li>\n<\/ul>\n\n<h4>1.4.3<\/h4>\n\n<ul>\n<li>Admin \"Retry AI\" button on the comments list for errored or unscored comments.<\/li>\n<\/ul>\n\n<h4>1.4.2<\/h4>\n\n<ul>\n<li>Auto-retry for comments held due to temporary API errors (~2.5 min, up to 3 attempts).<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Fixed sacm_strtoupper undefined function error.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Quality Score and auto Top Comment pinning.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Comment Schema markup for SEO plugins.<\/li>\n<\/ul>","raw_excerpt":"Pre-publish AI comment moderation for WordPress. Block spam and toxic comments before they go live \u2014 OpenAI, Gemini, Groq, Perspective API, or a free  &hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/335591","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=335591"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/koskar22"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=335591"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=335591"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=335591"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=335591"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=335591"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=335591"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}