{"id":323182,"date":"2026-06-10T21:56:42","date_gmt":"2026-06-10T21:56:42","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/social-comment-extension\/"},"modified":"2026-06-10T22:01:22","modified_gmt":"2026-06-10T22:01:22","slug":"cs-post-comment-reactions","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/cs-post-comment-reactions\/","author":15052625,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"CS Post Comment Reactions","header_author":"Sumit Tejani","header_description":"Adds social-style cycling reactions, mandatory media uploads, and real-time AJAX interactions to native WordPress comments.","assets_banners_color":"f8f8fc","last_updated":"2026-06-10 22:01:22","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/cs-post-comment-reactions\/","header_author_uri":"https:\/\/www.linkedin.com\/in\/sumittejani\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":35,"num_ratings":0,"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":"sumittejani","date":"2026-06-10 22:01:22"}},"upgrade_notice":{"1.0.0":"<p>Initial release \u2014 no upgrade steps required.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3568123,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3568125,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3568125,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3568125,"resolution":"1","location":"assets","locale":"","width":880,"height":660},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3568125,"resolution":"2","location":"assets","locale":"","width":880,"height":660},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3568125,"resolution":"3","location":"assets","locale":"","width":880,"height":660}},"screenshots":{"1":"The single cycling reaction button in its three states: neutral, Liked (blue), and Disliked (red).","2":"The floating \ud83d\udcce upload icon at the bottom-right corner of the comment textarea.","3":"A published comment showing an attached image and live reaction counts.","4":"The admin settings page with General, Customization, Upload, and Comments sections.","5":"The Statistics sidebar widget on the admin settings page."}},"plugin_section":[],"plugin_tags":[107,169,84,11780,174],"plugin_category":[44,50,56],"plugin_contributors":[266582],"plugin_business_model":[],"class_list":["post-323182","plugin","type-plugin","status-publish","hentry","plugin_tags-comments","plugin_tags-likes","plugin_tags-media","plugin_tags-reactions","plugin_tags-social","plugin_category-discussion-and-community","plugin_category-media","plugin_category-social-and-sharing","plugin_contributors-sumittejani","plugin_committers-concatstring","plugin_committers-sumittejani"],"banners":{"banner":"https:\/\/ps.w.org\/cs-post-comment-reactions\/assets\/banner-772x250.png?rev=3568125","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/cs-post-comment-reactions\/assets\/icon-128x128.png?rev=3568123","icon_2x":"https:\/\/ps.w.org\/cs-post-comment-reactions\/assets\/icon-256x256.png?rev=3568125","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/cs-post-comment-reactions\/assets\/screenshot-1.png?rev=3568125","caption":"The single cycling reaction button in its three states: neutral, Liked (blue), and Disliked (red)."},{"src":"https:\/\/ps.w.org\/cs-post-comment-reactions\/assets\/screenshot-2.png?rev=3568125","caption":"The floating \ud83d\udcce upload icon at the bottom-right corner of the comment textarea."},{"src":"https:\/\/ps.w.org\/cs-post-comment-reactions\/assets\/screenshot-3.png?rev=3568125","caption":"A published comment showing an attached image and live reaction counts."}],"raw_content":"<!--section=description-->\n<p><strong>CS Post Comment Reactions<\/strong> transforms the standard WordPress comment section into a fully social, interactive experience \u2014 no page reloads, no third-party services.<\/p>\n\n<h4>Core Features<\/h4>\n\n<p><strong>One-Button Cycling Reactions<\/strong>\nA single button cycles through three states: neutral \u2192 \ud83d\udc4d Liked \u2192 \ud83d\udc4e Disliked \u2192 neutral. Counts update live via AJAX without refreshing the page.<\/p>\n\n<p><strong>Media-First Comments<\/strong>\nEvery comment must include at least one image. A floating \ud83d\udcce icon at the bottom-right corner of the comment textarea lets commenters attach files instantly \u2014 or drag and drop directly onto the textarea.<\/p>\n\n<p><strong>Supported Formats<\/strong>\nJPG, JPEG, PNG, GIF, WEBP. Optional MP4 video. All types and the maximum file size are configurable.<\/p>\n\n<p><strong>Works With Any Theme<\/strong>\nHooks into WordPress's native <code>comment_text<\/code> filter and <code>comment_form<\/code> action \u2014 no template overrides, no shortcodes.<\/p>\n\n<p><strong>Nested \/ Threaded Comments<\/strong>\nFully compatible with WordPress's built-in <code>wp_list_comments()<\/code> at any nesting depth.<\/p>\n\n<p><strong>Guest Reactions<\/strong>\nAllow logged-out visitors to react. Guest identity is tracked via a localStorage UUID mirrored to a cookie, with an IP-address fallback.<\/p>\n\n<p><strong>Rate Limiting<\/strong>\nPrevents reaction spam: 10 reactions per user \/ IP per 5 minutes, enforced server-side using WordPress transients.<\/p>\n\n<p><strong>Admin Settings Panel<\/strong>\nFull settings page at Settings \u2192 Comment Reactions, covering features, button labels, icons, upload rules, comment sort order, and a one-click reaction data reset. Includes a live statistics widget.<\/p>\n\n<p><strong>Security First<\/strong>\nNonce verification on every AJAX request and every form submission. All input sanitised; all output escaped. Upload MIME type and size validation server-side. Ownership check prevents foreign attachment IDs from being submitted.<\/p>\n\n<p><strong>Translation Ready<\/strong>\nAll strings use the <code>cs-post-comment-reactions<\/code> text domain.<\/p>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.8 or higher<\/li>\n<li>PHP 7.4 or higher<\/li>\n<\/ul>\n\n<h3>Privacy Policy<\/h3>\n\n<p>This plugin does not transmit any data to external servers or third parties.<\/p>\n\n<p>For <strong>logged-in users<\/strong>, reactions are stored against their WordPress user ID in a local database table.<\/p>\n\n<p>For <strong>guest users<\/strong> (when enabled), a randomly-generated identifier is stored in the visitor's browser (<code>localStorage<\/code> and a cookie) and optionally their IP address is recorded in the local database solely to prevent duplicate reactions.<\/p>\n\n<p>All data is removed upon plugin uninstallation or by using the <strong>Reset All Reactions<\/strong> function.<\/p>\n\n<p>Site administrators are responsible for disclosing this data storage in their own Privacy Policy if required by applicable law (e.g. GDPR).<\/p>\n\n<!--section=installation-->\n<h4>Automatic (Recommended)<\/h4>\n\n<ol>\n<li>Log in to your WordPress dashboard.<\/li>\n<li>Navigate to <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Search for <strong>CS Post Comment Reactions<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<h4>Manual<\/h4>\n\n<ol>\n<li>Download the plugin <code>.zip<\/code> from WordPress.org.<\/li>\n<li>Go to <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Select the <code>.zip<\/code> and click <strong>Install Now<\/strong>.<\/li>\n<li>Click <strong>Activate Plugin<\/strong>.<\/li>\n<\/ol>\n\n<h4>After Activation<\/h4>\n\n<ol>\n<li>Go to <strong>Settings \u2192 Comment Reactions<\/strong> and configure the plugin.<\/li>\n<li>Ensure <strong>Settings \u2192 Discussion<\/strong> has comments and threaded comments enabled.<\/li>\n<li>Your theme must use <code>wp_list_comments()<\/code> and <code>comment_form()<\/code> \u2014 all default WordPress themes do.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20my%20theme%3F\"><h3>Does this work with my theme?<\/h3><\/dt>\n<dd><p>Yes, as long as your theme calls the standard WordPress comment functions <code>wp_list_comments()<\/code> and <code>comment_form()<\/code>. All default themes are supported.<\/p><\/dd>\n<dt id=\"can%20visitors%20react%20without%20logging%20in%3F\"><h3>Can visitors react without logging in?<\/h3><\/dt>\n<dd><p>Yes \u2014 enable <strong>Guest Voting<\/strong> in <strong>Settings \u2192 Comment Reactions \u2192 General<\/strong>. Guest reactions are tracked via a localStorage UUID with a cookie fallback and an IP-based last resort.<\/p><\/dd>\n<dt id=\"can%20i%20disable%20dislikes%3F\"><h3>Can I disable dislikes?<\/h3><\/dt>\n<dd><p>Yes. Uncheck <strong>Enable Dislikes<\/strong> in <strong>Settings \u2192 Comment Reactions \u2192 General<\/strong>. The button will toggle between Liked and neutral only.<\/p><\/dd>\n<dt id=\"what%20image%20formats%20are%20supported%3F\"><h3>What image formats are supported?<\/h3><\/dt>\n<dd><p>JPG, JPEG, PNG, GIF, and WEBP by default. MP4 video can be enabled. The maximum file size (default: 5 MB) is also configurable.<\/p><\/dd>\n<dt id=\"why%20must%20every%20comment%20have%20media%20attached%3F\"><h3>Why must every comment have media attached?<\/h3><\/dt>\n<dd><p>This plugin is built around a media-first commenting experience. Both client-side (instant feedback) and server-side (secure fallback) validation enforce the requirement.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20website%3F\"><h3>Will this slow down my website?<\/h3><\/dt>\n<dd><p>No. CSS and JavaScript are loaded only on singular posts and pages with comments open. All user interactions are handled via AJAX.<\/p><\/dd>\n<dt id=\"how%20do%20i%20reset%20all%20reaction%20data%3F\"><h3>How do I reset all reaction data?<\/h3><\/dt>\n<dd><p>Go to <strong>Settings \u2192 Comment Reactions<\/strong>, find the <strong>Maintenance<\/strong> box in the sidebar, and click <strong>Reset All Reactions<\/strong>.<\/p><\/dd>\n<dt id=\"does%20uninstalling%20the%20plugin%20remove%20all%20data%3F\"><h3>Does uninstalling the plugin remove all data?<\/h3><\/dt>\n<dd><p>Yes. Uninstalling via the WordPress admin removes the reactions table, all plugin options, all reaction comment meta, and all associated post meta.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Single cycling reaction button: neutral \u2192 Like \u2192 Dislike \u2192 neutral.<\/li>\n<li>Floating \ud83d\udcce upload icon at bottom-right corner of the comment textarea.<\/li>\n<li>Drag-and-drop file upload support on the textarea.<\/li>\n<li>Media-required enforcement: client-side and server-side.<\/li>\n<li>AJAX reactions with real-time count updates.<\/li>\n<li>Image lightbox for full-screen viewing.<\/li>\n<li>Guest voting support.<\/li>\n<li>Rate limiting (10 per user\/IP per 5 minutes).<\/li>\n<li>Admin Settings panel with statistics widget.<\/li>\n<li>Clean uninstall: all data removed on plugin deletion.<\/li>\n<li>Translation-ready.<\/li>\n<\/ul>","raw_excerpt":"Adds social-style cycling reactions, mandatory media uploads, and real-time AJAX interactions to native WordPress comments.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/323182","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=323182"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/sumittejani"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=323182"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=323182"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=323182"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=323182"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=323182"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=323182"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}