{"id":49929,"date":"2016-07-31T16:55:49","date_gmt":"2016-07-31T16:55:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins-wp\/zeno-report-comments\/"},"modified":"2026-01-10T09:34:30","modified_gmt":"2026-01-10T09:34:30","slug":"zeno-report-comments","status":"publish","type":"plugin","link":"https:\/\/tah.wordpress.org\/plugins\/zeno-report-comments\/","author":6559433,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.3.2","stable_tag":"2.3.2","tested":"6.9.4","requires":"4.1","requires_php":"7.0","requires_plugins":null,"header_name":"Zeno Report Comments","header_author":"Marcel Pol","header_description":"","assets_banners_color":"","last_updated":"2026-01-10 09:34:30","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/zenoweb.nl","header_author_uri":"https:\/\/timelord.nl","rating":5,"author_block_rating":0,"active_installs":200,"downloads":11941,"num_ratings":8,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.0":{"tag":"2.0.0","author":"mpol","date":"2023-11-30 13:19:46"},"2.0.1":{"tag":"2.0.1","author":"mpol","date":"2023-11-30 18:16:45"},"2.0.2":{"tag":"2.0.2","author":"mpol","date":"2023-12-01 18:36:40"},"2.0.3":{"tag":"2.0.3","author":"mpol","date":"2023-12-06 12:29:19"},"2.0.4":{"tag":"2.0.4","author":"mpol","date":"2023-12-13 10:37:01"},"2.1.0":{"tag":"2.1.0","author":"mpol","date":"2024-03-18 12:51:26"},"2.1.1":{"tag":"2.1.1","author":"mpol","date":"2024-04-02 13:06:00"},"2.1.2":{"tag":"2.1.2","author":"mpol","date":"2024-07-09 16:11:58"},"2.1.3":{"tag":"2.1.3","author":"mpol","date":"2024-11-15 12:11:49"},"2.1.4":{"tag":"2.1.4","author":"mpol","date":"2025-05-23 10:08:38"},"2.2.0":{"tag":"2.2.0","author":"mpol","date":"2025-06-27 08:35:31"},"2.3.0":{"tag":"2.3.0","author":"mpol","date":"2025-06-30 16:20:30"},"2.3.1":{"tag":"2.3.1","author":"mpol","date":"2025-07-02 12:06:08"},"2.3.2":{"tag":"2.3.2","author":"mpol","date":"2026-01-10 09:34:30"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":8},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":1468613,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":1468613,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.0","2.0.1","2.0.2","2.0.3","2.0.4","2.1.0","2.1.1","2.1.2","2.1.3","2.1.4","2.2.0","2.3.0","2.3.1","2.3.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":1464359,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":1464359,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":1464359,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":1464359,"resolution":"4","location":"assets","locale":""}},"screenshots":{"1":"Simple activation via discussion settings.","2":"Amount of reports per comment is shown in comments administration screen.","3":"Fits well within most themes without any further action.","4":"Ajax feedback right in place where available."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[141436,141433,21022,141435,141434],"plugin_category":[44,54],"plugin_contributors":[242712,242713,242715,242711,78711,242714,242716,156554],"plugin_business_model":[],"class_list":["post-49929","plugin","type-plugin","status-publish","hentry","plugin_tags-crowd-control","plugin_tags-flag-comments","plugin_tags-report-comments","plugin_tags-safe-report-comments","plugin_tags-spam-comment","plugin_category-discussion-and-community","plugin_category-security-and-spam-protection","plugin_contributors-1theo","plugin_contributors-jemar707","plugin_contributors-jmorti","plugin_contributors-karkidennis","plugin_contributors-mpol","plugin_contributors-niccrockett","plugin_contributors-spaceshipone","plugin_contributors-wmeric","plugin_committers-mpol"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/zeno-report-comments\/assets\/icon-128x128.png?rev=1468613","icon_2x":"https:\/\/ps.w.org\/zeno-report-comments\/assets\/icon-256x256.png?rev=1468613","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/zeno-report-comments\/assets\/screenshot-1.png?rev=1464359","caption":"Simple activation via discussion settings."},{"src":"https:\/\/ps.w.org\/zeno-report-comments\/assets\/screenshot-2.png?rev=1464359","caption":"Amount of reports per comment is shown in comments administration screen."},{"src":"https:\/\/ps.w.org\/zeno-report-comments\/assets\/screenshot-3.png?rev=1464359","caption":"Fits well within most themes without any further action."},{"src":"https:\/\/ps.w.org\/zeno-report-comments\/assets\/screenshot-4.png?rev=1464359","caption":"Ajax feedback right in place where available."}],"raw_content":"<!--section=description-->\n<p>This plugin gives your visitors the possibility to report a comment as inappropriate. After a set threshold is reached the comment is put into moderation where the moderator can decide whether or not he want to approve the comment or not. If a comment is approved by a moderator it will not be auto-moderated again while still counting the amount of reports.<\/p>\n\n<p>This plugin is a fork of safe-report-comments and has some features incorporated from crowd-control (a different fork).<\/p>\n\n<h4>Compatibility<\/h4>\n\n<p>This plugin is compatible with <a href=\"https:\/\/www.classicpress.net\">ClassicPress<\/a>.<\/p>\n\n<h4>Contributions<\/h4>\n\n<p>This plugin is also available in <a href=\"https:\/\/codeberg.org\/cyclotouriste\/zeno-report-comments\">Codeberg<\/a>.<\/p>\n\n<h3>Known issues<\/h3>\n\n<p>Automatic mode implementation currently does not work with threaded comments in the last level of threading. As the script attaches itself to the comment_reply which is not displayed once the maximum threading level is reached the abuse link is missing at this point. As a workaround set the threading level higher than the likely amount of threading depth.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Download and unzip the plugin.<\/li>\n<li>Copy the zeno-report-comments directory into your plugins folder.<\/li>\n<li>Visit your Plugins page and activate the plugin.<\/li>\n<li>A new checkbox called \"Allow comment flagging\" will appear in the Settings-&gt;Discussion page.<\/li>\n<li>Activate the flag and set the threshold value which will appear on the same page after activation.<\/li>\n<\/ol>\n\n<p>The plugin should work by default in most themes. If something does not work, please start a topic at the support forum.<\/p>\n\n<!--section=faq-->\n<p>This plugin cannot account for all themes and their layouts. Sometimes an extra divider is needed between reply and Zeno's text.\nA solution can be to add a little CSS code.<\/p>\n\n<pre><code>.zeno-comments-report-link::before { content: \" | \"; }\n<\/code><\/pre>\n\n<!--section=changelog-->\n<h4>2.3.2<\/h4>\n\n<ul>\n<li>2025-07-18<\/li>\n<li>Sanitize settings correctly.<\/li>\n<li>Use plugin_dir_path instead of WP_PLUGIN_DIR.<\/li>\n<li>Verify Nonces correctly.<\/li>\n<\/ul>\n\n<h4>2.3.1<\/h4>\n\n<ul>\n<li>2025-07-02<\/li>\n<li>Remove option to enable plugin after activation (makes no sense).<\/li>\n<li>Fix CSS, a link is an inline element, not block element.<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>2025-06-30<\/li>\n<li>Remove jQuery dependency.<\/li>\n<li>Fix option to block IP Addresses from reporting (in some cases).<\/li>\n<li>Also use disallowed_keys to block IP Addresses.<\/li>\n<li>Use static var for blocklist to save on CPU cycles.<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>2025-06-27<\/li>\n<li>Add option to block IP Addresses from reporting.<\/li>\n<li>Take some hints from phpcs.<\/li>\n<\/ul>\n\n<h4>2.1.4<\/h4>\n\n<ul>\n<li>2024-12-12<\/li>\n<li>Hide invisible elements for screenreaders.<\/li>\n<\/ul>\n\n<h4>2.1.3<\/h4>\n\n<ul>\n<li>2024-11-15<\/li>\n<li>Loading plugin translations should be delayed until init action.<\/li>\n<li>Use <strong>DIR<\/strong> instead of dirname(<strong>FILE<\/strong>).<\/li>\n<\/ul>\n\n<h4>2.1.2<\/h4>\n\n<ul>\n<li>2024-07-09<\/li>\n<li>Fix approving comments when moderation is enabled (thanks spaceshipone).<\/li>\n<\/ul>\n\n<h4>2.1.1<\/h4>\n\n<ul>\n<li>2024-04-02<\/li>\n<li>Make JavaScript more specific to avoid conflicts with other plugins.<\/li>\n<li>Only set comment to moderated when old status is unapproved and new status is approved.<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>2024-02-14<\/li>\n<li>Add column for responses to comment with link to edit screen.<\/li>\n<li>Add text 'report' to report column if there are reports.<\/li>\n<li>Add priority 90 and 91 to both columns.<\/li>\n<li>Add optional spambot protection for report button (thanks jmorti).<\/li>\n<li>When threading is disabled, use 'comment_text' filter and add reply link after wpautop.<\/li>\n<li>Show moderation note if already moderated.<\/li>\n<\/ul>\n\n<h4>2.0.4<\/h4>\n\n<ul>\n<li>2023-12-13<\/li>\n<li>Again fix for Twenty Twenty-Four theme, when threaded comments are off.<\/li>\n<\/ul>\n\n<h4>2.0.3<\/h4>\n\n<ul>\n<li>2023-12-06<\/li>\n<li>Add user info to notification emails (thanks niccrockett).<\/li>\n<li>Fix for Twenty Twenty-Four theme, it doesn't use $in_comment_loop.<\/li>\n<\/ul>\n\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>2023-12-01<\/li>\n<li>Add comment_text to notification emails (thanks jemar707).<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>2023-11-30<\/li>\n<li>Fix filter 'zeno_report_comments_allow_moderated_to_be_reflagged'.<\/li>\n<li>Cast $comment_id to (int) at top of functions instead of below.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>2023-11-30<\/li>\n<li>Rewite from class to simple hooks and functions.<\/li>\n<li>Remove support for admin notices, cast threshold to integer automatically.<\/li>\n<li>Add more notes and messages, plus filters.<\/li>\n<li>Make sure all admin screens have the same moderation results.<\/li>\n<li>Fix to not display for author of comment (thanks niccrockett).<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>2023-02-15<\/li>\n<li>Fix frontend filters for return messages (thanks 1theo).<\/li>\n<li>Escape more output.<\/li>\n<li>Some updates from phpcs and wpcs.<\/li>\n<li>Fix warning with handling of transient.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>2022-01-23<\/li>\n<li>Make sure to sanitize custom headers.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>2021-10-30<\/li>\n<li>Check WP Core blocklist for IP address.<\/li>\n<li>Some updates from phpcs and wpcs.<\/li>\n<\/ul>\n\n<h4>1.3.6<\/h4>\n\n<ul>\n<li>2021-03-25<\/li>\n<li>Add css class to 'moderated' text.<\/li>\n<li>Add function 'already_moderated'.<\/li>\n<\/ul>\n\n<h4>1.3.5<\/h4>\n\n<ul>\n<li>2021-02-22<\/li>\n<li>Fix deprecated jQuery calls with WP 5.6 and jQuery 3.5.<\/li>\n<\/ul>\n\n<h4>1.3.4<\/h4>\n\n<ul>\n<li>2020-11-10<\/li>\n<li>Add filter 'zeno_report_comments_admin_email' for email reports.<\/li>\n<\/ul>\n\n<h4>1.3.3<\/h4>\n\n<ul>\n<li>2020-06-16<\/li>\n<li>Small update to regex to match with more themes.<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>2020-05-21<\/li>\n<li>Replace nasty 'preg_match_all' by simpler 'preg_replace' to support more themes.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>2020-04-08<\/li>\n<li>Small fix in showing feedback for user that reported.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>2020-04-08<\/li>\n<li>Rewrite regex for threaded comments.<\/li>\n<li>Show if a comment is already moderated, to avoid confusion (thanks karkidennis).<\/li>\n<li>Use esc_html functions.<\/li>\n<li>Add uninstall.php file to uninstall options from db.<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>2019-04-24<\/li>\n<li>Add filter manage_edit-comments_sortable_columns so the column can be sorted (thanks wmeric).<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>2018-10-29<\/li>\n<li>Add reporter ip address to abuse report email.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>2018-10-03<\/li>\n<li>Don't use new function on wp-admin.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>2018-10-03<\/li>\n<li>Return comment content on threaded comments.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>2018-10-03<\/li>\n<li>Support link with unthreaded comments too.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>2018-06-26<\/li>\n<li>Add example text to the privacy policy.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>2018-06-11<\/li>\n<li>When moderating comment, set status to approve.<\/li>\n<li>Filter all frontend messages.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>2017-05-22<\/li>\n<li>Don't show flagging link if already moderated (really this time).<\/li>\n<li>Rewrite the html of the link.<\/li>\n<li>Ues wp_localize_script also for nonce.<\/li>\n<li>Add rel=\"nofollow\" to the link.<\/li>\n<li>Delete reports after moderating as allowed.<\/li>\n<li>Add link for moderators to moderate\/allow comments and remove reports.<\/li>\n<li>Add Admin JavaScript.<\/li>\n<li>Add version to JavaScripts.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>2016-07-31<\/li>\n<li>Forked from safe-report-comments.<\/li>\n<li>Support localization and translation.<\/li>\n<li>Make sure cookie_data is an array, as returned by json_decode.<\/li>\n<li>Make it not possible to report your own comments.<\/li>\n<li>Don't show flagging link if already moderated.<\/li>\n<li>Load JavaScript in footer, not in head.<\/li>\n<li>Add function get_user_ip for proxies (props Thorsten Ott).<\/li>\n<li>Add Copyright notices.<\/li>\n<li>Add settings for mail and add function for wp_mail (props Postmatic).<\/li>\n<li>Add action for each report and add function for wp_mail.<\/li>\n<li>Remove unused action register_admin_panel in admin_menu.<\/li>\n<\/ul>\n\n<h4>0.4.1<\/h4>\n\n<ul>\n<li>2014-07-23<\/li>\n<li>Typo fix, props spencermorin.<\/li>\n<\/ul>\n\n<h4>0.4<\/h4>\n\n<ul>\n<li>2014-07-23<\/li>\n<li>Security fix, h\/t vortfu.<\/li>\n<\/ul>\n\n<h4>0.3.2<\/h4>\n\n<ul>\n<li>2013-03-06<\/li>\n<li>New 'safe_report_comments_allow_moderated_to_be_reflagged' filter allows comments to be reflagged after being moderated.<\/li>\n<\/ul>\n\n<h4>0.3.1<\/h4>\n\n<ul>\n<li>2012-11-21<\/li>\n<li>Use home_url() for generating the ajaxurl on mapped domains, but admin_url() where the domain isn't mapped.<\/li>\n<\/ul>\n\n<h4>0.3<\/h4>\n\n<ul>\n<li>2012-11-07<\/li>\n<li>Coding standards and cleanup.<\/li>\n<\/ul>","raw_excerpt":"This plugin gives your visitors the possibility to report a comment as inappropriate. After a set threshold the comment is put into moderation.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/49929","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=49929"}],"author":[{"embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/mpol"}],"wp:attachment":[{"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=49929"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=49929"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=49929"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=49929"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=49929"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=49929"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}