Description
From the admin listing of posts (‘Edit Posts’) and pages (‘Edit Pages’), a user can close or open comments to any posts to which they have sufficient privileges to make such changes (essentially admins and post authors for their own posts). This is done via an AJAX-powered color-coded indicator. The color-coding gives instant feedback on the current status of the post for comments: green means the post/page is open to comments, red means the post/page is closed to comments. Being AJAX-powered means that the change is submitted in the background after being clicked without requiring a page reload.
This plugin will only function for administrative users in the admin who have JavaScript enabled.
Links: Plugin Homepage | Plugin Directory Page | GitHub | Author Homepage
Developer Documentation
Developer documentation can be found in DEVELOPER-DOCS.md. That documentation covers the hooks provided by the plugin.
As an overview, these are the hooks provided by the plugin:
c2c_one_click_close_comments_click_char
: Filter to customize the character, string, or markup used as the indicator used to toggle a post’s comment status.
Screenshots
Installation
- Install via the built-in WordPress plugin installer. Or install the plugin code inside the plugins directory for your site (typically
/wp-content/plugins/
). - Activate the plugin through the ‘Plugins’ admin menu in WordPress
- When on the ‘Edit Posts’ or ‘Edit Pages’ admin pages, click the indicators to toggle the comment status for a post, as necessary.
FAQ
-
I can see the colored comment bubble indicating current commenting status, but why aren’t they clickable?
-
The commenting status link/button is only clickable if you have JavaScript enabled.
-
What do the colors of the comment bubble mean?
-
Green means the post is currently open for comments; red means the post is not currently open for comments.
-
How can I customize the colors used for the comment bubble?
-
You can customize the colors via CSS. The class
.comment-state-1
applies to comments that are open. The class.comment-state-0
applies to comments that are closed. I recommend my Add Admin CSS plugin to easily add this CSS. -
How can I customize the character used to represent commenting status?
-
By default, commenting status is represented using the comment bubble dashicon,
dashicons-admin-comments
. You can change this by filteringc2c_one_click_close_comments_click_char
. Here’s an example — added to a theme’s functions.php file — to change it to the original bullet (solid circle) character:add_filter( 'c2c_one_click_close_comments_click_char', function ( $a ) { return "•"; } );
-
How can I open or close comments when editing a specific post?
-
WordPress already includes the interface for you to edit the comment status for a specific post. When editing a post, you’ll find the setting in the “Discussion” section; the checkbox is labeled “Allow Comments”.
-
Why does the comment status indicator indicate that comments are open, when in reality comments are disabled (or vice vera)?
-
The comment status indicator only reflects the value of the “Allow Comments” setting for the post. In most cases, the indicator will accurately reflect the ability for the user to see the comment form and/or submit a comment.
However, other plugins, the theme, or custom code may affect the visitor’s ability to see the comment form when viewing a post and/or may permit or disable commenting at the time the post is shown to them despite the value of the setting. For instance, you could have another plugin installed which disables comments for a post after one year. After a year, that plugin would disable comments in its own way, but the comment status indicator for the post could reflect that comments are open since technically the post’s “Allow Comments” setting would still be enabled.
-
Why can’t I see the comment status indicator for certain custom post types?
-
The comment status indicator only appears for post types that support having comments.
-
Does this plugin have unit tests?
-
Yes. The tests are not packaged in the release .zip file or included in plugins.svn.wordpress.org, but can be found in the plugin’s GitHub repository.
Reviews
Contributors & Developers
“One Click Close Comments” is open source software. The following people have contributed to this plugin.
Contributors“One Click Close Comments” has been translated into 4 locales. Thank you to the translators for their contributions.
Translate “One Click Close Comments” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
3.0 (2025-04-17)
Highlights:
This long-awaited major release improves accessibility by allowing keyboard navigation and interaction, reimplements JS to only use vanilla JS, properly shows (or doesn’t show) mouse cursor as pointer when hovering over comment status toggle, notes compatibility through WP 6.8+, and more.
Details:
- Change: Improve accessibility
- Change: Use a semantic
button
instead of aspan
- New: Allow comment state buttons to be navigable by keyboard
- New: Allow keyboard control by having the spacebar toggle comment state when toggle is focused
- Change: Use a semantic
- Change: Reimplement JavaScript to use vanilla JS and discontinue use of jQuery
- Change: Prevent UI cues indicating comment status might be changeable to users who cannot change them (they never could)
- Change: Prevent cursor from changing to pointer when comment status cannot be changed
- Change: Prevent asynchronous JS submission of request to toggle comment status
- Change: Prevent display and use of comment status indicator for post types that don’t support comments
- Change: Improve nonce handling
- Change: Generate a unique nonce per post rather than a generic nonce
- Change: Store nonce in ‘data-nonce’ attribute rather than ‘id’
- Change: Use unused private static class variable ‘nonce_field’ as base for nonce field key and value
- Change: Use result of update to recognize if the comment status didn’t get changed for some reason
- Change: Ensure AJAX response is only ever an integer
- Change: Remove any markup potentially introduced in a string translation
- Fix: Restore changing mouse cursor to a pointer on hover
- Change: Assign additional generic class of ‘comment_state’ to indicator markup
- Change: Reset field_title variable in
reset()
and usereset()
during initialization - Change: Use
update()
rather thanquery()
for making SQL update request - New: Add inline documentation to class variables
- New: Add recommendation for Add Admin CSS plugin for adding the CSS suggested in FAQ entry related to customizing indicator
- New: Add DEVELOPER-DOCS.md and move hooks documentation into it
- Change: Discontinue unnecessary explicit loading of textdomain
- Change: Prevent unwarranted PHPCS complaints
- Change: Tweak some text in the FAQ section, including fixing a typo
- Change: Note compatibility through WP 6.8+
- Change: Update copyright date (2025)
- Change: Note compatibility through PHP 8.3+
- Change: Tweak installation instruction
- Change: Reduce number of ‘Tags’ in readme.txt
- Change: Remove development and testing related files from release packaging
- Unit tests:
- Fix: Allow tests to run against current versions of WordPress
- Hardening: Prevent direct web access to
bootstrap.php
- Change: Restructure unit test directories
- Change: Move
bin/
intotests/
- Change: Move
tests/bootstrap.php
intotests/phpunit/
- Change: Move
tests/test-one-click-close-comments.php
intotests/phpunit/tests/
- Change: Move
- Change: Remove ‘test-‘ prefix from unit test files
- Change: In bootstrap, store path to plugin file constant
- Change: In bootstrap, add backcompat for PHPUnit pre-v6.0
- Change: Rename
phpunit.xml
tophpunit.xml.dist
per best practices - New: Add
composer.json
for PHPUnit Polyfill dependency - Change: Explicitly define return type for overridden methods
- New: Add a few more possible TODO items
2.7.1 (2021-04-01)
- New: Add a unit test
- Change: Note compatibility through WP 5.7+
- Change: Update copyright date (2021)
2.7 (2020-08-02)
Highlights:
- This recommended release updates its JavaScript, streamlines markup output, adds unit testing, adds a TODO.md file, updates a few URLs to be HTTPS, notes compatibility through 5.4+, and other minor behind-the-scenes improvements.
Details:
- New: Extract code for determining click character into new
get_click_char()
- New: Add unit tests
- New: Add
reset()
for resetting memoized variables - New: Add TODO.md and move existing TODO list from top of main plugin file into it (and add items to it)
- Change: Improve output of markup
- Remove encompassing
span
only shown for users authorized to toggle comment status - Add ‘title’ attribute to primary span to indicate current state
- Change text to not indicate that comment staus can be toggled when user does not have that capability
- Remove encompassing
- Change: Update JavaScript
- Change: Migrate use of deprecated
.live()
to.on()
- Change: Handle removal of a previously encapsulating
span
- Change: Remove unused code
- Change: Update code syntax
- Change: Migrate use of deprecated
- Change: Allow class to be defined even when loaded outside the admin
- Change: Return ‘-1’ to Ajax requests that don’t result in the comment status being toggled
- Change: Add
$and_exit
argument totoggle_comment_status()
to prevent exiting in order to facilitate unit testing - Change: Refactor
add_post_column()
to be more concise - Change: Add inline docs for deprecated filter
one-click-close-comments-click-char
- Change: Switch to use of strict equality operator instead of simple equality operator
- Change: Note compatibility through WP 5.4+
- Change: Update links to coffee2code.com to be HTTPS
Full changelog is available in CHANGELOG.md.