{"id":374036,"date":"2026-09-22T15:35:48","date_gmt":"2026-09-22T15:35:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/dadsoo-ajax-comment\/"},"modified":"2026-09-22T15:35:37","modified_gmt":"2026-09-22T15:35:37","slug":"dadsoo-ajax-comment","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/dadsoo-ajax-comment\/","author":15234608,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"4.0.1","stable_tag":"4.0.1","tested":"7.1.2","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Dadsoo Ajax Comment","header_author":"Iman Shadmehri","header_description":"Advanced AJAX comment system with threaded replies, like\/dislike voting, and full moderation control.","assets_banners_color":"cad7da","last_updated":"2026-09-22 15:35:37","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/ishadmehri\/dadsoo-ajax-comment","header_author_uri":"https:\/\/elinweb.ir","rating":0,"author_block_rating":0,"active_installs":0,"downloads":39,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"4.0.1":{"tag":"4.0.1","author":"imansh","date":"2026-09-22 15:35:37","revision":3707683}},"upgrade_notice":{"4.0.0":"<p>The plugin folder and main file are renamed (agax \u2192 ajax typo fix). Deactivate the old &quot;Dadsoo Agax Comment&quot; install, install this one, and activate it \u2014 votes, comment data, and old shortcodes\/widgets carry over automatically.<\/p>","3.2.0":"<p>Default plugin strings are now in English; a Persian translation ships in languages\/. No action needed if you don&#039;t customize the plugin&#039;s text.<\/p>","3.0.0":"<p>The main plugin file was renamed, so WordPress deactivates the plugin on update \u2014 reactivate it once from the Plugins screen. Old shortcodes, widgets, and votes keep working automatically.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3707665,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3707665,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3707665,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3707665,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["4.0.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[221,107,76538,6007,11300],"plugin_category":[44,53,59],"plugin_contributors":[281858],"plugin_business_model":[],"class_list":["post-374036","plugin","type-plugin","status-publish","hentry","plugin_tags-ajax","plugin_tags-comments","plugin_tags-elementor","plugin_tags-threaded-comments","plugin_tags-voting","plugin_category-discussion-and-community","plugin_category-ratings-and-reviews","plugin_category-utilities-and-tools","plugin_contributors-imansh","plugin_committers-imansh"],"banners":{"banner":"https:\/\/ps.w.org\/dadsoo-ajax-comment\/assets\/banner-772x250.png?rev=3707665","banner_2x":"https:\/\/ps.w.org\/dadsoo-ajax-comment\/assets\/banner-1544x500.png?rev=3707665","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/dadsoo-ajax-comment\/assets\/icon-128x128.png?rev=3707665","icon_2x":"https:\/\/ps.w.org\/dadsoo-ajax-comment\/assets\/icon-256x256.png?rev=3707665","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Dadsoo Ajax Comment replaces the default comment form and list with an AJAX-driven version: comments post without a page reload, replies nest up to three levels deep, and visitors can like or dislike any comment.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>\u2705 Post comments without reloading the page<\/li>\n<li>\u2705 Progressive loading of approved comments, with a loading spinner and an empty state<\/li>\n<li>\u2705 Threaded replies up to three levels deep<\/li>\n<li>\u2705 Instant publishing for logged-in users with the <code>moderate_comments<\/code> capability<\/li>\n<li>\u2705 Like\/dislike voting that can be changed or undone, recorded server-side so clearing cookies can't be used to vote again<\/li>\n<li>\u2705 After each \"load more\", the page scrolls to and highlights the first newly loaded comment<\/li>\n<li>\u2705 Configurable button and status text (load more, loading, empty)<\/li>\n<li>\u2705 Uses the WordPress avatar and displays the comment date<\/li>\n<li>\u2705 Records IP address and user agent for moderation and spam review<\/li>\n<li>\u2705 Nonce-verified AJAX requests, a honeypot field on both forms, and comments routed through WordPress's own <code>wp_new_comment()<\/code> so Akismet, comment flood control, and the disallowed-words list all still run<\/li>\n<li>\u2705 Two independent Elementor widgets: a comment form and a comments list<\/li>\n<li>\u2705 Elementor style controls for the avatar, author name, comment text, vote icons, and the load-more button<\/li>\n<\/ul>\n\n<h4>Shortcodes<\/h4>\n\n<pre><code>[dadsoo-ajax-comment-form]\n[dadsoo-ajax-comments]\n[dadsoo-ajax-comments items=\"10\" avatar_size=\"72\"]\n[dadsoo-ajax-comments load_more_text=\"More comments\" loading_text=\"One moment\u2026\" empty_text=\"Be the first to comment\"]\n<\/code><\/pre>\n\n<p>Guest comments and replies are saved as pending and can be moderated from the regular Comments screen. Users with the <code>moderate_comments<\/code> capability (Administrators and Editors) have their comments published immediately and shown in the list without a page reload.<\/p>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.8 or newer<\/li>\n<li>PHP 7.4 or newer<\/li>\n<li>Elementor (only if you use the widgets \u2014 the shortcodes don't need it)<\/li>\n<\/ul>\n\n<p>Author: Iman Shadmehri. Website: https:\/\/elinweb.ir<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/dadsoo-ajax-comment<\/code>, or install it through Plugins \u2192 Add New.<\/li>\n<li>Activate the plugin through the Plugins screen.<\/li>\n<li>Add the shortcodes above to any page or template, or drag the two Elementor widgets (\"Dadsoo Ajax Comment Form\" and \"Dadsoo Ajax Comments\") onto a page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20replace%20the%20built-in%20wordpress%20comment%20form%3F\"><h3>Does this replace the built-in WordPress comment form?<\/h3><\/dt>\n<dd><p>It's a separate form and list rendered by shortcode or widget, but it stores comments in the standard <code>wp_comments<\/code> table, so existing moderation tools keep working.<\/p><\/dd>\n<dt id=\"how%20deep%20can%20replies%20go%3F\"><h3>How deep can replies go?<\/h3><\/dt>\n<dd><p>Three levels. At the deepest level the reply button is hidden, and the server also rejects a deeper reply so no approved comment is ever created that the list couldn't display.<\/p><\/dd>\n<dt id=\"can%20people%20vote%20more%20than%20once%20by%20clearing%20their%20cookies%3F\"><h3>Can people vote more than once by clearing their cookies?<\/h3><\/dt>\n<dd><p>No. Votes are recorded against a stable per-visitor key \u2014 the user ID when logged in, or a salted hash of IP address and user agent for guests \u2014 not just a cookie. The cookie only mirrors the vote back to the browser.<\/p><\/dd>\n<dt id=\"does%20it%20work%20without%20elementor%3F\"><h3>Does it work without Elementor?<\/h3><\/dt>\n<dd><p>Yes. The shortcodes work with any theme or page builder. Elementor is only required for the two widgets.<\/p><\/dd>\n<dt id=\"what%20language%20is%20the%20plugin%20in%3F\"><h3>What language is the plugin in?<\/h3><\/dt>\n<dd><p>Source strings are in English. Translations, including Persian (fa_IR), are managed through <a href=\"https:\/\/translate.wordpress.org\/\">translate.wordpress.org<\/a> and delivered automatically by WordPress \u2014 no files to install.<\/p><\/dd>\n<dt id=\"i%20have%20an%20older%20%22dadsoo%20agax%20comment%22%20install.%20is%20this%20the%20same%20plugin%3F\"><h3>I have an older \"Dadsoo Agax Comment\" install. Is this the same plugin?<\/h3><\/dt>\n<dd><p>Yes \u2014 versions before 4.0 shipped with \"agax\" instead of \"ajax\" in every identifier (a leftover typo from an earlier name). 4.0 corrects it. See the Upgrade Notice below; existing votes, comments, and content using the old shortcodes are carried over automatically.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>4.0.1<\/h4>\n\n<ul>\n<li>Removed the bundled <code>.po<\/code>\/<code>.mo<\/code> translation files and the manual <code>load_plugin_textdomain()<\/code> call, per WordPress.org plugin review \u2014 WordPress.org-hosted plugins get this handled automatically via translate.wordpress.org.<\/li>\n<\/ul>\n\n<h4>4.0.0<\/h4>\n\n<ul>\n<li>Corrected a long-standing \"agax\" typo (should have read \"ajax\") throughout every identifier: plugin slug and main file, class name, AJAX actions, nonce, meta keys, cookies, shortcodes, Elementor widget names, text domain, and the JS global. Existing data (vote records, like\/dislike counts) is migrated automatically, and the old <code>dadsoo-agax-*<\/code> shortcodes\/widgets keep working.<\/li>\n<\/ul>\n\n<h4>3.2.0<\/h4>\n\n<ul>\n<li>All strings now ship in English by default; a Persian (fa_IR) translation is bundled in <code>languages\/<\/code>.<\/li>\n<li>Added the GPL license header required for the WordPress.org plugin directory, and a <code>readme.txt<\/code>.<\/li>\n<\/ul>\n\n<h4>3.1.0<\/h4>\n\n<ul>\n<li>Added a loading spinner, an empty state, and scroll-to-and-highlight on newly loaded comments.<\/li>\n<li>Added configurable load-more\/loading\/empty text, plus matching Elementor style controls.<\/li>\n<li>Fixed silently-ignored smooth scrolling in some browsers by falling back to an instant scroll.<\/li>\n<\/ul>\n\n<h4>3.0.0<\/h4>\n\n<ul>\n<li>Renamed every <code>elinweb<\/code>\/<code>elin<\/code> identifier to <code>dadsoo<\/code> (file, classes, actions, meta keys, cookies, shortcodes, widget names). Old shortcodes and widget names still work.<\/li>\n<li>Votes were previously controlled by a cookie alone, so clearing it allowed unlimited voting. Votes are now recorded against a stable per-visitor key.<\/li>\n<li>Comments are now submitted through <code>wp_new_comment()<\/code> so Akismet, flood control, and moderation rules run.<\/li>\n<li>Fixed an N+1 query pattern when rendering nested replies (one query per depth level instead of one per comment).<\/li>\n<li>CSS\/JS now load only on pages that actually use the shortcode or widget.<\/li>\n<li>Fixed the \"load more\" button never hiding when the comment count was an exact multiple of the page size.<\/li>\n<\/ul>\n\n<h4>2.3.1<\/h4>\n\n<ul>\n<li>Fixed uploaded SVG vote icons ignoring the icon color control.<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>Added padding and border-radius controls for the like\/dislike buttons.<\/li>\n<li>Added the <code>avatar_size<\/code> shortcode attribute.<\/li>\n<li>Added IP and user-agent logging for spam review.<\/li>\n<li>Fixed the reply form never opening, replies below the first level never rendering, and reply indentation on RTL sites.<\/li>\n<\/ul>\n\n<h4>2.2<\/h4>\n\n<ul>\n<li>Initial public documentation and Elementor widgets.<\/li>\n<\/ul>","raw_excerpt":"AJAX-powered comments with threaded replies, like\/dislike voting, and full Elementor widget support.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/374036","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=374036"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/imansh"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=374036"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=374036"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=374036"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=374036"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=374036"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=374036"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}